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.OPCPackage;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;        OPCPackage src1Package = null;        OPCPackage src2Package = null;         OutputStream dest = new FileOutputStream("dest.docx");        try {            in1 = new FileInputStream("/Users/liuyahui/test.docx");            in2 = new FileInputStream("/Users/liuyahui/test1.docx");            src1Package = OPCPackage.open(in1);            src2Package = OPCPackage.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)); //相继合并  }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

没有什么可凭仗,只有他的好身体,没有地方可去,只想到处流浪。

java 使用POI合并两个word文档

相关文章:

你感兴趣的文章:

标签云: