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;

import java.io.*;
import java.util.List;

/**
 * 鍚堝苟word
 */
public class MergeDoc {

	/**
	 * 鍚堝苟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鏂囦欢涓緱绌鸿鏍囩
//        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();
//        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);
	}

}