From 4cb586238c078799d91e4f22a662aa00fea24eef Mon Sep 17 00:00:00 2001
From: 6c <420680616@qq.com>
Date: 星期五, 17 十月 2025 17:27:45 +0800
Subject: [PATCH] 适配存储到数据库的文件; 不需要存储到数据库的,若是集群,那么同步到集群的其他节点; 若是失败,定时任务重试,至多3次
---
src/main/java/com/product/file/service/MergeDoc.java | 131 +++++++++++++++----------------------------
1 files changed, 46 insertions(+), 85 deletions(-)
diff --git a/src/main/java/com/product/file/service/MergeDoc.java b/src/main/java/com/product/file/service/MergeDoc.java
index 9b27d65..607e133 100644
--- a/src/main/java/com/product/file/service/MergeDoc.java
+++ b/src/main/java/com/product/file/service/MergeDoc.java
@@ -1,13 +1,11 @@
package com.product.file.service;
-import org.apache.poi.openxml4j.opc.OPCPackage;
-import org.apache.poi.xwpf.usermodel.XWPFDocument;
-import org.apache.tomcat.util.http.fileupload.IOUtils;
+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;
import java.io.*;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -15,96 +13,59 @@
*/
public class MergeDoc {
- /**
- * 鍚堝苟docx鏂囦欢
- *
- * @param srcDocxs 闇�瑕佸悎骞剁殑鐩爣docx鏂囦欢
- * @param response 鍚堝苟鍚庣殑docx杈撳嚭鏂囦欢
- */
- public static File mergeDoc(List<File> srcDocxs, String tempFilePath) {
- OutputStream dest = null;
- List<OPCPackage> opcpList = new ArrayList<>();
- int length = null == srcDocxs ? 0 : srcDocxs.size();
- /**
- * 寰幆鑾峰彇姣忎釜docx鏂囦欢鐨凮PCPackage瀵硅薄
- */
- for (int i = 0; i < length; i++) {
- File doc = srcDocxs.get(i);
- OPCPackage srcPackage = null;
- try {
- srcPackage = OPCPackage.open(doc);
- } catch (Exception e) {
- e.printStackTrace();
- }
- if (null != srcPackage) {
- opcpList.add(srcPackage);
- }
- }
- int opcpSize = opcpList.size();
- //鑾峰彇鐨凮PCPackage瀵硅薄澶т簬0鏃讹紝鎵ц鍚堝苟鎿嶄綔
- if (opcpSize > 0) {
- try {
- dest = new FileOutputStream(tempFilePath);
- XWPFDocument src1Document = new XWPFDocument(opcpList.get(0));
- CTBody src1Body = src1Document.getDocument().getBody();
- //OPCPackage澶т簬1鐨勯儴鍒嗘墽琛屽悎骞舵搷浣�
- if (opcpSize > 1) {
- for (int i = 1; i < opcpSize; i++) {
- OPCPackage src2Package = opcpList.get(i);
- XWPFDocument src2Document = new XWPFDocument(src2Package);
- CTBody src2Body = src2Document.getDocument().getBody();
- appendBody(src1Body, src2Body);
- }
- }
- //灏嗗悎骞剁殑鏂囨。鍐欏叆鐩爣鏂囦欢涓�
- src1Document.write(dest);
- return new File(tempFilePath);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //鍏抽棴娴�
- IOUtils.closeQuietly(dest);
- }
- }
- return null;
- }
+ /**
+ * 鍚堝苟docx鏂囦欢
+ *
+ * @param srcDocxs 闇�瑕佸悎骞剁殑鐩爣docx鏂囦欢
+ * @param response 鍚堝苟鍚庣殑docx杈撳嚭鏂囦欢
+ */
+ public static File mergeDoc(List<File> srcDocxs, String tempFilePath) throws Exception {
+ File file = null;
+ if (srcDocxs.size() > 1) {
+ file = srcDocxs.get(0);
+ for (int i = 1; i < srcDocxs.size(); i++) {
+ file = MergeWordDocuments.mergeFile(file, srcDocxs.get(i));
+ }
+ File file1 = new File(tempFilePath);
+ FileUtil.copyFile(file, file1);
+ FileUtil.del(file);
+ return file1;
+ }
+ return file;
+ }
- /**
- * 鍚堝苟鏂囨。鍐呭
- *
- * @param src 鐩爣鏂囨。
- * @param append 瑕佸悎骞剁殑鏂囨。
- * @throws Exception
- */
- private static void appendBody(CTBody src, CTBody append) throws Exception {
- XmlOptions optionsOuter = new XmlOptions();
- optionsOuter.setSaveOuter();
- String appendString = append.xmlText(optionsOuter);
- //鏇挎崲word涓緱绌鸿銆佹牴鎹嚜宸遍渶姹傛潵閫夋嫨闇�涓嶉渶瑕�
- //word鏂囨。鍏跺疄鏄敱xml鏂囦欢鍚堟垚寰楋紝涓�涓嬫浛鎹㈠緱鏄綔鑰呭搴斿緱xml鏂囦欢涓緱绌鸿鏍囩
+ /**
+ * 鍚堝苟鏂囨。鍐呭
+ *
+ * @param src 鐩爣鏂囨。
+ * @param append 瑕佸悎骞剁殑鏂囨。
+ * @throws Exception
+ */
+ private static void appendBody(CTBody src, CTBody append) throws Exception {
+ XmlOptions optionsOuter = new XmlOptions();
+ optionsOuter.setSaveOuter();
+ String appendString = append.xmlText(optionsOuter);
+ //鏇挎崲word涓緱绌鸿銆佹牴鎹嚜宸遍渶姹傛潵閫夋嫨闇�涓嶉渶瑕�
+ //word鏂囨。鍏跺疄鏄敱xml鏂囦欢鍚堟垚寰楋紝涓�涓嬫浛鎹㈠緱鏄綔鑰呭搴斿緱xml鏂囦欢涓緱绌鸿鏍囩
// appendString = appendString.replaceAll("<w:p><w:pPr><w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"浠垮畫\\\" w:eastAsia=\\\"浠垮畫\\\" w:hAnsi=\\\"浠垮畫\\\"/><w:sz w:val=\\\"24\\\"/></w:rPr></w:pPr></w:p>","");
// appendString = appendString.replaceAll("<w:p><w:pPr xsi:nil=\\\"true\\\" xmlns:xsi=\\\"xsi\\\"/></w:p>","");
// appendString = appendString.replaceAll("<w:p><w:pPr><w:ind w:firstLineChars=\\\"200\\\" w:firstLine=\\\"600\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"浠垮畫\\\" w:eastAsia=\\\"浠垮畫\\\" w:hAnsi=\\\"浠垮畫\\\"/><w:sz w:val=\\\"30\\\"/><w:szCs w:val=\\\"30\\\"/></w:rPr></w:pPr></w:p>","");
// appendString = appendString.replaceAll("<w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/>","");;
- String srcString = src.xmlText();
+ String srcString = src.xmlText();
// srcString = srcString.replaceAll("<w:p><w:pPr><w:ind w:firstLineChars=\\\"200\\\" w:firstLine=\\\"600\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"浠垮畫\\\" w:eastAsia=\\\"浠垮畫\\\" w:hAnsi=\\\"浠垮畫\\\"/><w:sz w:val=\\\"30\\\"/><w:szCs w:val=\\\"30\\\"/></w:rPr></w:pPr></w:p>","");
// srcString = srcString.replaceAll("<w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/>","");
// srcString = srcString.replaceAll("<w:p><w:pPr><w:spacing w:line=\\\"360\\\" w:lineRule=\\\"auto\\\"/><w:jc w:val=\\\"right\\\"/><w:rPr><w:rFonts w:ascii=\\\"浠垮畫\\\" w:eastAsia=\\\"浠垮畫\\\" w:hAnsi=\\\"浠垮畫\\\"/><w:sz w:val=\\\"24\\\"/></w:rPr></w:pPr></w:p>","");
// srcString = srcString.replaceAll("<w:p><w:pPr xsi:nil=\\\"true\\\" xmlns:xsi=\\\"xsi\\\"/></w:p>","");
- String prefix = srcString.substring(0, srcString.indexOf(">") + 1);
- String mainPart = srcString.substring(srcString.indexOf(">") + 1,
- srcString.lastIndexOf("<"));
- String sufix = srcString.substring(srcString.lastIndexOf("<"));
- String addPart = appendString.substring(appendString.indexOf(">") + 1,
- appendString.lastIndexOf("<"));
- CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart
- + sufix);
- src.set(makeBody);
- }
+ String prefix = srcString.substring(0, srcString.indexOf(">") + 1);
+ String mainPart = srcString.substring(srcString.indexOf(">") + 1,
+ srcString.lastIndexOf("<"));
+ String sufix = srcString.substring(srcString.lastIndexOf("<"));
+ String addPart = appendString.substring(appendString.indexOf(">") + 1,
+ appendString.lastIndexOf("<"));
+ CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart
+ + sufix);
+ src.set(makeBody);
+ }
}
--
Gitblit v1.9.2