From 1be1f0f28ecb033290a1ce21996667c2f358fa86 Mon Sep 17 00:00:00 2001
From: 许鹏程 <1821349743@qq.com>
Date: 星期四, 01 八月 2024 16:09:38 +0800
Subject: [PATCH] commit

---
 src/main/java/com/product/file/controller/WebOfficeController.java |   12 ++++--
 src/main/java/com/product/file/util/FileUtil.java                  |   40 ++-----------------
 src/main/java/com/product/file/service/MergeDoc.java               |    3 +
 src/main/java/com/product/file/util/MergeWordDocuments.java        |   52 ++++++++++++++++++++++++++
 4 files changed, 67 insertions(+), 40 deletions(-)

diff --git a/src/main/java/com/product/file/controller/WebOfficeController.java b/src/main/java/com/product/file/controller/WebOfficeController.java
index 1ad734e..7478895 100644
--- a/src/main/java/com/product/file/controller/WebOfficeController.java
+++ b/src/main/java/com/product/file/controller/WebOfficeController.java
@@ -176,11 +176,15 @@
 			}
 			//鏂囦欢鍚嶏紙绐楀彛鐨勫悕瀛楋級
 			String file_title = fse.getString("fileName");
-			if (file_title == null) {
-				file_title = "";
-			} else {
-				file_title = UnicodeUtil.toString(file_title);
+			FieldSetEntity fieldSetEntity = fileManagerService.getBaseDao().getFieldSetEntity("product_sys_attachments", fse.getString("uuid"), false);
+			if (!FieldSetEntity.isEmpty(fieldSetEntity)) {
+				file_title = fieldSetEntity.getString("file_name");
 			}
+//			if (file_title == null) {
+//				file_title = "";
+//			} else {
+//				file_title = UnicodeUtil.toString(file_title);
+//			}
 			SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
 			//
 			Boolean allowNestRed = false;
diff --git a/src/main/java/com/product/file/service/MergeDoc.java b/src/main/java/com/product/file/service/MergeDoc.java
index cf29496..607e133 100644
--- a/src/main/java/com/product/file/service/MergeDoc.java
+++ b/src/main/java/com/product/file/service/MergeDoc.java
@@ -1,6 +1,7 @@
 package com.product.file.service;
 
 import cn.hutool.core.io.FileUtil;
+import com.product.file.util.MergeWordDocuments;
 import org.apache.xmlbeans.XmlOptions;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
 
@@ -23,7 +24,7 @@
 		if (srcDocxs.size() > 1) {
 			file = srcDocxs.get(0);
 			for (int i = 1; i < srcDocxs.size(); i++) {
-				file = com.product.file.util.FileUtil.mergeFile(file, srcDocxs.get(i));
+				file = MergeWordDocuments.mergeFile(file, srcDocxs.get(i));
 			}
 			File file1 = new File(tempFilePath);
 			FileUtil.copyFile(file, file1);
diff --git a/src/main/java/com/product/file/util/FileUtil.java b/src/main/java/com/product/file/util/FileUtil.java
index 1b1e553..ea85a09 100644
--- a/src/main/java/com/product/file/util/FileUtil.java
+++ b/src/main/java/com/product/file/util/FileUtil.java
@@ -3,8 +3,6 @@
 import cn.hutool.core.lang.UUID;
 import com.aspose.words.Document;
 import com.aspose.words.SaveFormat;
-import com.deepoove.poi.XWPFTemplate;
-import com.deepoove.poi.xwpf.NiceXWPFDocument;
 import com.google.common.collect.Maps;
 import com.product.common.lang.StringUtils;
 import com.product.core.config.Global;
@@ -16,7 +14,6 @@
 import java.io.*;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -31,6 +28,10 @@
 public class FileUtil {
 
 	private FileUtil() {
+	}
+
+	public static void main(String[] args) {
+		System.out.println(FileUtil.checkDocType(new File("D:\\downloads\\鍏充簬鍗忚皟瑙e喅瑗垮畞涓囪揪鍦颁骇缃笟鏈夐檺鍏徃鍟嗗搧鎴块鍞祫閲戠洃绠¤处鎴峰喕缁撶浉鍏抽棶棰� (1).doc")));
 	}
 
 	public static String checkDocType(File file) {
@@ -78,38 +79,7 @@
 	 * @return
 	 */
 	public static File mergeFile(File source, File target) throws Exception {
-		if ("doc".equals(FileUtil.checkDocType(source))) {
-			source = toDocx(source);
-		}
-		boolean delTarget = false;
-		if ("doc".equals(FileUtil.checkDocType(target))) {
-			target = toDocx(target);
-			delTarget = true;
-		}
-		XWPFTemplate template = XWPFTemplate.compile(source);
-		NiceXWPFDocument xwpfDocument = template.getXWPFDocument();
-		try {
-			NiceXWPFDocument sub = new NiceXWPFDocument(new FileInputStream((target)));
-			NiceXWPFDocument newDoc = xwpfDocument.merge(sub);
-			String tempFile = Global.getSystemConfig("temp.dir", "./attachment/temp") + File.separator + UUID.randomUUID() + ".docx";
-			try (FileOutputStream out = new FileOutputStream(tempFile)) {
-				newDoc.write(out);
-				newDoc.close();
-				return new File(tempFile);
-			} catch (IOException e) {
-				throw e;
-			} finally {
-				if (delTarget) {
-					target.delete();
-				}
-				newDoc.close();
-				sub.close();
-			}
-		} catch (IOException e) {
-			throw e;
-		} catch (Exception e) {
-			throw e;
-		}
+		return MergeWordDocuments.mergeFile(source, target);
 	}
 
 	public static File toDocx(File file) {
diff --git a/src/main/java/com/product/file/util/MergeWordDocuments.java b/src/main/java/com/product/file/util/MergeWordDocuments.java
new file mode 100644
index 0000000..ae56132
--- /dev/null
+++ b/src/main/java/com/product/file/util/MergeWordDocuments.java
@@ -0,0 +1,52 @@
+package com.product.file.util;
+
+import cn.hutool.core.lang.UUID;
+import com.product.core.config.Global;
+import com.spire.doc.*;
+
+import java.io.*;
+
+public class MergeWordDocuments {
+
+	public static File mergeFile(File source, File target) throws Exception {
+		if ("doc".equals(FileUtil.checkDocType(source))) {
+			source = FileUtil.toDocx(source);
+		}
+		boolean delTarget = false;
+		if ("doc".equals(FileUtil.checkDocType(target))) {
+			target = FileUtil.toDocx(target);
+			delTarget = true;
+		}
+		try (InputStream sourceIn = new FileInputStream(source); InputStream targetIn = new FileInputStream(target)) {
+			Document sourceDoc = new Document(sourceIn);
+			Document targetDoc = new Document(targetIn);
+			for (Object section : targetDoc.getSections()) {
+				Section sec = (Section) section;
+				for (Object docObj : sec.getBody().getChildObjects()) {
+					DocumentObject obj = (DocumentObject) docObj;
+					Section lastSection = sourceDoc.getLastSection();
+					Body body = lastSection.getBody();
+					body.getChildObjects().add(obj.deepClone());
+				}
+
+			}
+//			doc.insertTextFromStream(targetIn, com.spire.doc.FileFormat.Docx);
+			String tempFile = Global.getSystemConfig("temp.dir", "./attachment/temp") + File.separator + UUID.randomUUID() + ".docx";
+			try (FileOutputStream out = new FileOutputStream(tempFile)) {
+				sourceDoc.saveToStream(out, FileFormat.Docx);
+				return new File(tempFile);
+			} catch (IOException e) {
+				throw e;
+			} finally {
+				if (delTarget) {
+					target.delete();
+				}
+//				doc.close();
+			}
+		} catch (IOException e) {
+			throw e;
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+}

--
Gitblit v1.9.2