欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

java 使用POI合并两个word文档

时间:2021-08-07 08:43:16|栏目:JAVA代码|点击:

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基础教程之组合(composition)

栏    目:JAVA代码

下一篇:Java中的隐式参数和显示参数实例详解

本文标题:java 使用POI合并两个word文档

本文地址:http://www.codeinn.net/misctech/164814.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有