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
投稿
猜你喜欢
- 一、abstract 抽象的抽象类:被abstract 修饰的类语法: abstract class 类名{}抽象方法 : 被a
- using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using
- spring @Autowired注解无法注入问题简述在使用spring框架的过程中,常会遇到这种两情况:1、在扫描的包以外使用需要使用ma
- 一、按钮组件1.1 提交按钮组件package swing;import java.awt.*;import java.awt.event.
- 前言自 Java 7 以来,java 中的 switch 语句经历了快速发展。因此,在本文中,我们将通过示例讨论 switch 语句从 ja
- 一、添加依赖<!--SpringBoot使用Swagger2构建API文档的依赖--> <dep
- 目录一对一关联保存:留言表实体类配置:(主表)留言内容表配置:(从表)留言表hbm.xml配置:(主表)留言内容表hbm.xml配置:(从表
- 通过下面一张图看下要实现的功能,具体详情如下所示:现在我就来介绍些软件的其它功能。希望大家有所受益。模拟人为搜索商品在刷单的时候,不能直接拿
- 有段时间没有写博客了,也在努力的从传统单机开发向分布式系统过度,所以再次做一些笔记,以方便日后查看。直接进入正题吧,今天记录spring-b
- 方法一:1.在pom.xml文件下添加依赖包<dependency><groupId>com.alibaba<
- 本文实例为大家分享了unity shader实现光照效果的具体代码,供大家参考,具体内容如下效果图:shader被附给了球。灯光需要在属性面
- 验证码的实现原理: 在一个Servlet中生成验证,并把验证码上的数据保存在Session,用户提交验证码之后,会提交给另外一个
- Java中有哪些队列ArrayBlockingQueue 使用ReentrantLockLinkedBlockingQueue 使用Reen
- 一.MyBatis简介1)MyBatis 是一款优秀的持久层框架2)MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结
- Java空字符串与null的区别:1、类型 null表示的是一个对象的值,而并不是一个字符串。例如声明一个对象的引用,String a =
- Vector实现班级信息管理系统,供大家参考,具体内容如下代码如下:import java.util.*;public class Demo
- 批量修改代码如下<update id="UPDATE_HOTEL_REAL_TIME_PRICE" paramet
- 这篇文章介绍了Java+Nginx实现POP、IMAP、SMTP邮箱代理服务,我们本次使用的环境为Centos7下,java程序我们通过ec
- 1. 二叉树的顺序存储1.1 存储方式使用数组保存二叉树结构,方式即将二叉树用 层序遍历 方式放入数组中。一般只适合表示完全二叉树,这种方式
- 一、HashMap初始化方法HashMap() 不带参数,默认初始化大小为16,加载因子为0.75;HashMap(int initialC