java 使用POI合并兩個(gè)word文檔
更新時(shí)間:2021年07月15日 15:26:53 作者:喜碼拉雅
這篇文章主要介紹了java 使用POI合并兩個(gè)word文檔的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
java POI合并兩個(gè)word文檔
有需要的可以將主函數(shù)中寫死的地方改為一個(gè)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(); //設(shè)置分頁(yè)符 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 合并
//兩個(gè)對(duì)象進(jìn)行追加 public XWPFDocument mergeWord(XWPFDocument document,XWPFDocument doucDocument2) throws Exception { XWPFDocument src1Document =document ; XWPFParagraph p = src1Document.createParagraph(); //設(shè)置分頁(yè)符 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; }
無(wú)限合并
XWPFDocument xmd=list.get(0); //默認(rèn)獲取第一個(gè)作為模板 for (int i=0;i<list.size()-1;i++) { xmd=mergeWord(xmd,list.get(i+1)); //相繼合并 }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于SpringBoot?使用?Flink?收發(fā)Kafka消息的示例詳解
這篇文章主要介紹了基于SpringBoot?使用?Flink?收發(fā)Kafka消息,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01java打印表格 將ResultSet中的數(shù)據(jù)打印成表格問題
這篇文章主要介紹了java打印表格 將ResultSet中的數(shù)據(jù)打印成表格問題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Mybatis Mapper接口和xml綁定的多種方式、內(nèi)部實(shí)現(xiàn)原理和過(guò)程解析
在Mybatis中,我們需要?jiǎng)?chuàng)建一個(gè)與實(shí)體類對(duì)應(yīng)的Mapper接口,然后在該接口上添加方法,這些方法對(duì)應(yīng)著SQL語(yǔ)句,這篇文章主要介紹了Mybatis Mapper接口和xml綁定的多種方式、內(nèi)部實(shí)現(xiàn)原理和過(guò)程,需要的朋友可以參考下2023-11-11全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系
String的值是不可變的,這就導(dǎo)致每次對(duì)String的操作都會(huì)生成新的String對(duì)象,不僅效率低下,而且大量浪費(fèi)有限的內(nèi)存空間,StringBuffer是可變類,和線程安全的字符串操作類,任何對(duì)它指向的字符串的操作都不會(huì)產(chǎn)生新的對(duì)象,StringBuffer和StringBuilder類功能基本相似2013-01-01Spring動(dòng)態(tài)多數(shù)據(jù)源配置實(shí)例Demo
本篇文章主要介紹了Spring動(dòng)態(tài)多數(shù)據(jù)源配置實(shí)例Demo,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01