软件编程
位置:首页>> 软件编程>> java编程>> java 使用POI合并两个word文档

java 使用POI合并两个word文档

作者:喜码拉雅  发布时间:2022-09-30 12:22:54 

标签:java,POI,word

java POI合并两个word文档

有需要的可以将主函数中写死的地方改为一个List


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.poi.openxml4j.opc.O * ackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
public class MergeDoc {
   public static void main (String[] args) throws Exception {
       InputStream in1 = null;
       InputStream in2 = null;
       O * ackage src1Package = null;
       O * ackage src2Package = null;

OutputStream dest = new FileOutputStream("dest.docx");
       try {
           in1 = new FileInputStream("/Users/liuyahui/test.docx");
           in2 = new FileInputStream("/Users/liuyahui/test1.docx");
           src1Package = O * ackage.open(in1);
           src2Package = O * ackage.open(in2);
       } catch (Exception e) {
           e.printStackTrace();
       }

XWPFDocument src1Document = new XWPFDocument(src1Package);
       CTBody src1Body = src1Document.getDocument().getBody();
       XWPFParagraph p = src1Document.createParagraph();
       //设置分页符
       p.setPageBreak(true);
       XWPFDocument src2Document = new XWPFDocument(src2Package);
       CTBody src2Body = src2Document.getDocument().getBody();
       appendBody(src1Body, src2Body);
       src1Document.write(dest);
   }

private static void appendBody(CTBody src, CTBody append) throws Exception {
       XmlOptions optionsOuter = new XmlOptions();
       optionsOuter.setSaveOuter();
       String appendString = append.xmlText(optionsOuter);
       String srcString = src.xmlText();
       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);
   }
}

poi生成word --XWPFDocument 合并


//两个对象进行追加
   public  XWPFDocument mergeWord(XWPFDocument document,XWPFDocument doucDocument2) throws Exception {
     XWPFDocument src1Document =document ;
     XWPFParagraph p = src1Document.createParagraph();
     //设置分页符
     p.setPageBreak(true);
     CTBody src1Body = src1Document.getDocument().getBody();
     XWPFDocument src2Document = doucDocument2;
     CTBody src2Body = src2Document.getDocument().getBody();
//      XWPFParagraph p2 = src2Document.createParagraph();
     XmlOptions optionsOuter = new XmlOptions();
     optionsOuter.setSaveOuter();
     String appendString = src2Body.xmlText(optionsOuter);
     String srcString = src1Body.xmlText();
     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);
     src1Body.set(makeBody);
     return src1Document;
 }

无限合并


 XWPFDocument xmd=list.get(0); //默认获取第一个作为模板
       for (int i=0;i<list.size()-1;i++) {
        xmd=mergeWord(xmd,list.get(i+1)); //相继合并
 }

来源:https://blog.csdn.net/qq_37043780/article/details/83623847

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com