From fb8c159d1b035fbc8fc1656da27a197bdb2f9c01 Mon Sep 17 00:00:00 2001
From: 许鹏程 <1821349743@qq.com>
Date: 星期二, 24 十二月 2024 19:50:02 +0800
Subject: [PATCH] 维保人员资质

---
 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..e40c95f 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