From 28640fa008701e22fe1d1c54c31690d150914d4b Mon Sep 17 00:00:00 2001
From: 许鹏程 <1821349743@qq.com>
Date: 星期二, 16 七月 2024 18:36:29 +0800
Subject: [PATCH] 套红文档合并

---
 src/main/java/com/product/file/service/MergeDoc.java |  125 ++++++++++++++---------------------------
 1 files changed, 44 insertions(+), 81 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..58343ea 100644
--- a/src/main/java/com/product/file/service/MergeDoc.java
+++ b/src/main/java/com/product/file/service/MergeDoc.java
@@ -1,5 +1,8 @@
 package com.product.file.service;
 
+import cn.hutool.core.io.FileUtil;
+import com.product.file.util.AsposeUtil;
+import com.product.file.util.FileUtils;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.tomcat.util.http.fileupload.IOUtils;
@@ -15,96 +18,56 @@
  */
 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) {
+		if (srcDocxs.size() > 1) {
+			File file = srcDocxs.get(0);
+			for (int i = 1; i < srcDocxs.size(); i++) {
+				file = AsposeUtil.mergeWord(file, srcDocxs.get(i));
+			}
+			FileUtil.copyFile(file, new File(tempFilePath));
+			FileUtil.del(file);
+		}
+		return null;
+	}
 
-    /**
-     * 鍚堝苟鏂囨。鍐呭
-     *
-     * @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