Browse Source

word导出PDF格式丢失,更换组件导出

anderx 5 months ago
parent
commit
b1d4e881f0

+ 10 - 0
pom.xml

@@ -352,6 +352,16 @@
 			<artifactId>poi-ooxml</artifactId>
 			<version>3.17</version>
 		</dependency>
+		<dependency>
+			<groupId>org.docx4j</groupId>
+			<artifactId>docx4j-export-fo</artifactId>
+			<version>8.3.9</version>
+		</dependency>
+		<dependency>
+			<groupId>org.docx4j</groupId>
+			<artifactId>docx4j-JAXB-Internal</artifactId>
+			<version>8.3.9</version>
+		</dependency>
 
 
 		<dependency>

+ 7 - 5
src/main/java/com/goafanti/common/controller/PublicController.java

@@ -15,6 +15,7 @@ import com.goafanti.common.service.PovertyService;
 import com.goafanti.common.utils.*;
 import com.goafanti.common.utils.excel.FileUtils;
 import com.goafanti.common.utils.excel.NewExcelUtil;
+import com.goafanti.common.utils.pdf.PDFUtils;
 import com.goafanti.core.mybatis.JDBCIdGenerator;
 import com.goafanti.core.shiro.token.TokenManager;
 import com.goafanti.core.websocket.SystemWebSocketHandler;
@@ -1034,12 +1035,13 @@ public class PublicController extends CertifyApiController {
 	public Result mergeDocumentsToPdf(HttpServletResponse  response) throws DocumentException, IOException {
 		// 转换Word为PDF文件
 //		PDFUtils.convertWordToPDF("E:/4.docx", "E:/4-PDF.pdf");
+		PDFUtils.newConvertWordToPDF("E:/tmp/4.docx", "E:/tmp/4-PDF.pdf");
 //		PDFUtils.convertXlsxToPDF("E:/tmp/0811.xlsx", "E:/tmp/0811-PDF.pdf");
-		List<String> list = Arrays.asList(
-				"E:/tmp/4-PDF.pdf",
-				"E:/tmp/0811-PDF.pdf"
-		);
-		DocumentToPDFMerger.mergePdfFiles(list,  "E:/tmp/"+System.currentTimeMillis()+".pdf");
+//		List<String> list = Arrays.asList(
+//				"E:/tmp/4-PDF.pdf",
+//				"E:/tmp/0811-PDF.pdf"
+//		);
+//		DocumentToPDFMerger.mergePdfFiles(list,  "E:/tmp/"+System.currentTimeMillis()+".pdf");
 		return new Result<>();
 	}
 }

+ 15 - 0
src/main/java/com/goafanti/common/utils/pdf/PDFUtils.java

@@ -15,6 +15,9 @@ import com.itextpdf.text.pdf.PdfWriter;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.poi.xwpf.usermodel.*;
+import org.docx4j.Docx4J;
+import org.docx4j.openpackaging.exceptions.Docx4JException;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
 import org.springframework.http.MediaType;
 
 import javax.servlet.http.HttpServletResponse;
@@ -376,6 +379,18 @@ public class PDFUtils {
         return font;
     }
 
+    public static void newConvertWordToPDF(String s, String s1) {
+        try (FileOutputStream fos = new FileOutputStream(s1)) {
+            WordprocessingMLPackage wordMLPackage = Docx4J.load(new File(s));
+            Docx4J.toPDF(wordMLPackage, fos);
+        } catch (Docx4JException e) {
+            throw new RuntimeException("转换Word文档到PDF失败: " + s, e);
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException("找不到文件: " + s + " 或 " + s1, e);
+        } catch (IOException e) {
+            throw new RuntimeException("写入PDF文件时发生IO错误: " + s1, e);
+        }
+    }
 
 
     public  void pushRd(OutWordRdDetails data, HttpServletResponse response,String uploadPath) {