diff --git a/jeecg-boot/jeecg-module-demo/pom.xml b/jeecg-boot/jeecg-module-demo/pom.xml
index 424cb05..77b64c5 100644
--- a/jeecg-boot/jeecg-module-demo/pom.xml
+++ b/jeecg-boot/jeecg-module-demo/pom.xml
@@ -37,6 +37,18 @@
easypoi-annotation
4.3.0
+
+ org.docx4j
+ docx4j-export-fo
+ 6.1.0
+
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/service/impl/Project4WordServiceImpl.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/service/impl/Project4WordServiceImpl.java
index ba2d756..ccc0d20 100644
--- a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/service/impl/Project4WordServiceImpl.java
+++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/project/service/impl/Project4WordServiceImpl.java
@@ -24,6 +24,7 @@ import org.jeecg.modules.demo.projectType.entity.ProjectType;
import org.jeecg.modules.demo.projectType.service.IProjectTypeService;
import org.jeecg.modules.demo.userext.entity.UserExt;
import org.jeecg.modules.demo.userext.service.IUserExtService;
+import org.jeecg.modules.demo.utils.FileUtils;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysDepartService;
@@ -34,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import java.io.File;
@@ -251,31 +253,61 @@ public class Project4WordServiceImpl extends ServiceImpl
ProjectDto dto = getData4Xiangmushu(obj);
Map map = BeanUtil.beanToMap(dto);
System.out.println("map = " + JSON.toJSONString(map));
+ File file = new File(model4wordPath + File.separator);
+ String basePath = file.getPath() + File.separator;
+// String modelFilePath = basePath + "baseInfoModel.docx";
+// String modelFilePath = basePath + "model2v.doc";
+ String modelFilePath = "C:\\Users\\YX\\Documents\\model3v.docx";
+ log.info("the baseInfoModel path:{}", modelFilePath);
+ String mergeWordFileName = dto.getProjectName() + ".docx";
+ File outDir = new File(basePath + "out");
+ if (!outDir.exists()) {
+ outDir.mkdirs();
+ }
try {
- File file = new File(model4wordPath + File.separator);
- String basePath = file.getPath() + File.separator;
- String modelFilePath = basePath + "baseInfoModel.doc";
- log.info("the baseInfoModel path:{}", modelFilePath);
//1 生成文件
XWPFDocument doc = WordExportUtil.exportWord07(modelFilePath, map);
List wordList = new ArrayList<>();
wordList.add(doc);
- FileInputStream fis = new FileInputStream("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\正文V15.docx");
+ FileInputStream fis = new FileInputStream(basePath + "正文.docx");
wordList.add(new XWPFDocument(fis));
-
// 2.把集合里面的word文档全部合并在一个文档
- XWPFDocument mergeWord = WordUtils.mergeWord(wordList);
- File outDir = new File(basePath+"out");
- if (!outDir.exists()) {
- outDir.mkdirs();
- }
- FileOutputStream fos = new FileOutputStream(new File(outDir, "mergework1122.docx"));
+ XWPFDocument mergeWordObj = WordUtils.mergeWord(wordList);
+// String mergeWordFileName = "mergework1122v3.docx";
+ FileOutputStream fos = new FileOutputStream(new File(outDir, mergeWordFileName));
// FileOutputStream fos2 = new FileOutputStream("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\test1121v7.docx");
- mergeWord.write(fos);
+ mergeWordObj.write(fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
+
+ try {
+ String pdfName = dto.getProjectName()+".pdf";
+// createPdf(outDir + File.separator + mergeWordFileName, outDir, pdfName);
+// createPdf(outDir + File.separator + "2025黄淮学院工程技术研究中心1121.docx", outDir, pdfName);
+ } catch (Exception e2) {
+ e2.printStackTrace();
+ }
return dto;
}
+
+ public Object createPdf(String wordPath, File file, String padFileName){
+ String pdfFileName = "convertDocx2Pdf.pdf";
+ String downloadFile = "pdf导出.pdf";
+// HttpServletResponse response = getResponse();
+ if (wordPath.equals("")) {
+ log.info("word文件路径不能为空!");
+ Assert.notNull(wordPath, "word路径不能为空");
+ } else {
+
+// FileUtils.convertDocx2Pdf(wordPath, file + File.separator + padFileName);
+ try {
+ FileUtils.convertDocxToPdf(wordPath, file + File.separator + padFileName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return null;
+ }
}
diff --git a/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/utils/FileUtils.java b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/utils/FileUtils.java
new file mode 100644
index 0000000..ac55a85
--- /dev/null
+++ b/jeecg-boot/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/utils/FileUtils.java
@@ -0,0 +1,189 @@
+package org.jeecg.modules.demo.utils;
+
+import cn.afterturn.easypoi.word.WordExportUtil;
+import com.aliyuncs.utils.IOUtils;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.docx4j.Docx4J;
+import org.docx4j.convert.out.FOSettings;
+import org.docx4j.fonts.IdentityPlusMapper;
+import org.docx4j.fonts.Mapper;
+import org.docx4j.fonts.PhysicalFonts;
+import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
+import org.springframework.util.Assert;
+
+import java.io.*;
+import java.util.Map;
+
+/**
+ * @description:
+ * @param:
+ * @return:
+ * @author: z.h.c
+ * @date: 24/11/22 10:17
+ */
+public class FileUtils {
+ /**
+ *
+ * @param templatePath
+ * @param saveDir
+ * @param fileName
+ * @param params
+ * @return
+ */
+ public static String exportWord(String templatePath, String saveDir, String fileName, Map params) {
+ Assert.notNull(templatePath, "模板路径不能为空");
+ Assert.notNull(saveDir, "临时文件路径不能为空");
+ Assert.notNull(fileName, "导出文件名不能为空");
+ Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式");
+ if (!saveDir.endsWith("/")) {
+ saveDir = saveDir + File.separator;
+ }
+
+ File dir = new File(saveDir);
+ if (!dir.exists()) {
+ dir.mkdirs();
+ }
+ String savePath = saveDir + fileName;
+
+ try {
+ XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
+ FileOutputStream fos = new FileOutputStream(savePath);
+ doc.write(fos);
+ fos.flush();
+ fos.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return savePath;
+ }
+
+
+
+ /**
+ * @param wordPath word文件路径
+ * @param pdfPath pdf输出路径
+ * @return
+ */
+ public static String convertDocx2Pdf(String wordPath, String pdfPath) {
+ OutputStream os = null;
+ InputStream is = null;
+ if (pdfPath.endsWith("/")) {
+ pdfPath = pdfPath + File.separator;
+ }
+ try {
+ is = new FileInputStream(new File(wordPath));
+ WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(is);
+ Mapper fontMapper = new IdentityPlusMapper();
+ fontMapper.put("隶书", PhysicalFonts.get("LiSu"));
+ fontMapper.put("宋体", PhysicalFonts.get("SimSun"));
+ fontMapper.put("微软雅黑", PhysicalFonts.get("Microsoft Yahei"));
+ fontMapper.put("黑体", PhysicalFonts.get("SimHei"));
+ fontMapper.put("楷体", PhysicalFonts.get("KaiTi"));
+ fontMapper.put("新宋体", PhysicalFonts.get("NSimSun"));
+ fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai"));
+ fontMapper.put("华文仿宋", PhysicalFonts.get("STFangsong"));
+ fontMapper.put("宋体扩展", PhysicalFonts.get("simsun-extB"));
+ fontMapper.put("仿宋", PhysicalFonts.get("FangSong"));
+ fontMapper.put("仿宋_GB2312", PhysicalFonts.get("FangSong_GB2312"));
+ fontMapper.put("幼圆", PhysicalFonts.get("YouYuan"));
+ fontMapper.put("华文宋体", PhysicalFonts.get("STSong"));
+ fontMapper.put("华文中宋", PhysicalFonts.get("STZhongsong"));
+ mlPackage.setFontMapper(fontMapper);
+
+ os = new FileOutputStream(pdfPath);
+
+ //docx4j docx转pdf
+ FOSettings foSettings = Docx4J.createFOSettings();
+ foSettings.setWmlPackage(mlPackage);
+ Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
+
+ is.close();//关闭输入流
+ os.close();//关闭输出流
+
+ return "";
+ } catch (Exception e) {
+ e.printStackTrace();
+ try {
+ if (is != null) {
+ is.close();
+ }
+ if (os != null) {
+ os.close();
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ } finally {
+ File file = new File(wordPath);
+ if (file != null && file.isFile() && file.exists()) {
+ file.delete();
+ }
+ }
+ return "";
+ }
+
+ /**
+ * docx文档转换为PDF
+ *
+ * @param pdfPath PDF文档存储路径
+ * @throws Exception 可能为Docx4JException, FileNotFoundException, IOException等
+ */
+ public static void convertDocxToPdf(String docxPath, String pdfPath) throws Exception {
+
+ FileOutputStream fileOutputStream = null;
+ try {
+ File file = new File(docxPath);
+ fileOutputStream = new FileOutputStream(new File(pdfPath));
+ WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(file);
+ setFontMapper(mlPackage);
+ Docx4J.toPDF(mlPackage, new FileOutputStream(new File(pdfPath)));
+ }catch (Exception e){
+ e.printStackTrace();
+// log.error("docx文档转换为PDF失败");
+ }finally {
+ IOUtils.closeQuietly(fileOutputStream);
+ }
+ }
+
+ private static void setFontMapper(WordprocessingMLPackage mlPackage) throws Exception {
+ Mapper fontMapper = new IdentityPlusMapper();
+ fontMapper.put("隶书", PhysicalFonts.get("LiSu"));
+ fontMapper.put("宋体", PhysicalFonts.get("SimSun"));
+ fontMapper.put("微软雅黑", PhysicalFonts.get("Microsoft Yahei"));
+ fontMapper.put("黑体", PhysicalFonts.get("SimHei"));
+ fontMapper.put("楷体", PhysicalFonts.get("KaiTi"));
+ fontMapper.put("新宋体", PhysicalFonts.get("NSimSun"));
+ fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai"));
+ fontMapper.put("华文仿宋", PhysicalFonts.get("STFangsong"));
+ fontMapper.put("宋体扩展", PhysicalFonts.get("simsun-extB"));
+ fontMapper.put("仿宋", PhysicalFonts.get("FangSong"));
+ fontMapper.put("仿宋_GB2312", PhysicalFonts.get("FangSong_GB2312"));
+ fontMapper.put("幼圆", PhysicalFonts.get("YouYuan"));
+ fontMapper.put("华文宋体", PhysicalFonts.get("STSong"));
+ fontMapper.put("华文中宋", PhysicalFonts.get("STZhongsong"));
+
+ mlPackage.setFontMapper(fontMapper);
+ }
+
+
+ /**
+ * @param path 图片路径
+ * @return
+ * @throws IOException
+ */
+ public static byte[] getImageBase64(String path) throws IOException {
+ InputStream input = new FileInputStream(path);
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
+ byte[] buf = new byte[1024];
+ int numBytesRead = 0;
+ while ((numBytesRead = input.read(buf)) != -1) {
+ output.write(buf, 0, numBytesRead);
+ }
+ byte[] data = output.toByteArray();
+ output.close();
+ input.close();
+ return data;
+ }
+
+}
+
diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/pom.xml b/jeecg-boot/jeecg-module-system/jeecg-system-start/pom.xml
index 9ec4f87..229efb2 100644
--- a/jeecg-boot/jeecg-module-system/jeecg-system-start/pom.xml
+++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/pom.xml
@@ -26,7 +26,7 @@
-
+
diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/word/WordExportUtil_test.java b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/word/WordExportUtil_test.java
index 34b88aa..4b40998 100644
--- a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/word/WordExportUtil_test.java
+++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/word/WordExportUtil_test.java
@@ -1,5 +1,7 @@
package org.jeecg.modules.word;
+import cn.afterturn.easypoi.entity.ImageEntity;
+import cn.afterturn.easypoi.word.WordExportUtil;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import org.apache.poi.openxml4j.opc.OPCPackage;
@@ -9,22 +11,25 @@ import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.apache.xmlbeans.XmlOptions;
import org.jeecg.JeecgSystemApplication;
+import org.jeecg.common.util.WordUtils;
import org.jeecg.modules.demo.project.service.IProject4WordService;
import org.jeecg.modules.demo.project.service.IProjectService;
-//import org.jeecgframework.poi.word.WordExportUtil;
+import org.jeecg.modules.demo.utils.FileUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
-import cn.afterturn.easypoi.word.WordExportUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* @Description: TODO
@@ -72,7 +77,7 @@ public class WordExportUtil_test {
try {
// XWPFDocument doc = WordExportUtil.exportWord07("C:\\Users\\YX\\Desktop\\testword\\model2.doc", map);
XWPFDocument doc = WordExportUtil.exportWord07("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\page1Model.doc", map);
- FileOutputStream fos = new FileOutputStream( "C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\test1121v1.docx");
+ FileOutputStream fos = new FileOutputStream("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\test1121v1.docx");
doc.write(fos);
fos.close();
} catch (Exception e) {
@@ -80,9 +85,50 @@ public class WordExportUtil_test {
}
}
+ @Test
+ public void test3() {
+ String wordPath = "C:\\Users\\YX\\Documents\\00.docx";
+ String padPath = "C:\\Users\\YX\\Documents\\00.pdf";
+
+// FileUtils.convertDocx2Pdf(wordPath, file + File.separator + padFileName);
+ try {
+ FileUtils.convertDocxToPdf(wordPath, padPath);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void test4() {
+ File newFile = new File("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\合并1122v4.docx");
+ List srcfile = new ArrayList<>();
+
+ File file1 = new File("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\正文V14.docx");
+ File file2 = new File("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\正文V15.docx");
+// File file3 = new File("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\yiJianModel.doc");
+ srcfile.add(file1);
+ srcfile.add(file2);
+
+ List wordList = new ArrayList<>();
+ try {
+ FileInputStream fis = new FileInputStream("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\正文V14.docx");
+ wordList.add(new XWPFDocument(fis));
+ FileInputStream fis2 = new FileInputStream("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\正文V15.docx");
+ wordList.add(new XWPFDocument(fis2));
+ XWPFDocument mergeWordObj = WordUtils.mergeWord(wordList);
+ FileOutputStream fos = new FileOutputStream("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\合并1122v4.docx");
+ mergeWordObj.write(fos);
+ fos.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ System.out.println("*****合成成功222********");
+ }
+
@Test
public void test2() {
- File newFile = new File("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\合并1122v2.docx");
+ File newFile = new File("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\合并1122v3.docx");
List srcfile = new ArrayList<>();
File file1 = new File("C:\\Users\\YX\\Desktop\\testword\\xiangmushu\\正文V14.docx");