まず、需要の説明
例えば、カバーは、ワード上記体内に挿入されます
第二に、輸入依存
< 依存性> < のgroupId > org.apache.poi </ のgroupId > < たartifactId > POI </ たartifactId > < バージョン> 4.1.1 </ バージョン> </ 依存> < 依存性> < のgroupId > org.apache.poi </ groupId > < たartifactId > POI-OOXML </ たartifactId > < バージョン> 4.1。1 </バージョン> </ 依存> < 依存性> < のgroupId > org.apache.poi </ のgroupId > < たartifactId > POI-OOXML-スキーマ</ たartifactId > < バージョン> 4.1.1 </ バージョン> </ 依存> < 依存性> < groupIdを> org.apache.xmlbeans </ groupIdを> < たartifactId > XMLBeansの</ たartifactId> < バージョン> 3.1.0 </ バージョン> </ 依存関係>
第三に、準備
2つのワード文書を準備します
第四に、コード
インポートのjava.io.File; 輸入java.io.FileFilter; 輸入java.io.FileInputStream; 輸入java.io.FileOutputStreamは、 インポートにjava.io.OutputStream; 輸入はjava.util.ArrayList; 輸入java.util.HashMapを; 輸入はjava.util.List; 輸入java.util.Map; 輸入org.apache.poi.openxml4j.opc.OPCPackage; 輸入org.apache.poi.xwpf.usermodel.Document; 輸入org.apache.poi.xwpf.usermodel.XWPFDocument; 輸入org.apache.poi.xwpf.usermodel.XWPFPictureData; 輸入org.apache.xmlbeans.XmlOptions。 ファイルfileRootは = 新しいファイル(パス); リスト <ファイル> subFileList = 新しいのArrayList <ファイル> (); getAllFile(subFileList、fileRoot)。 以下のための(ファイルのファイル:subFileList){ 文字列名 = file.getName(); ファイルにnewFile = 新しいファイル( "F:/最終/" +タイプ+ "/" + 名)。 一覧 <ファイル> SRCFILE = 新しい ArrayListを<> (); ファイルfile1 = 新しいファイル( "E:/ 1 /确认打印报告/" +タイプ+ "/" + 名)。 ファイルfile2 = 新しいファイル( "D:/ワード/封面/生成/" +タイプ+ "/" + 名)。 srcfile.add(FILE2)。 試します{ たOutputStream DEST = 新しいたFileOutputStream(にnewFile)。 ArrayListの <XWPFDocument> documentList = 新しい ArrayListを<> (); XWPFDocumentドキュメント = nullを。 以下のために(INT ; I <srcfile.size(); iが0 = I ++ ){ FileInputStreamの中 = 新規のFileInputStream(srcfile.get(I).getPath())。 OPCPackageオープン = OPCPackage.open(IN) XWPFDocument文書は =新しいXWPFDocument(オープン)。 documentList.add(文書)。 )(in.close。 } ため(INT iは= 0; I <documentList.size(); I ++ ){ DOC = documentList.get(0 )。 もし(I!= 0 ){ appendBody(DOC、documentList.get(I))。 } } // doc.createParagraph()setPageBreak(TRUE)。 doc.write(DEST)。 System.out.println(名); doc.close(); dest.close(); } キャッチ(例外e){ e.printStackTrace(); } } } } パブリック 静的 ボイド appendBodyは(XWPFDocument SRC、XWPFDocument追記)スロー例外{ CTBody src1Body = src.getDocument()getBody()。 CTBody src2Body = 。append.getDocument()getBody(); 一覧 <XWPFPictureData> allPictures = append.getAllPictures(); // 记录图片合并前及合并后的ID 地図<文字列、文字列>マップ= 新しいHashMapの(); 用(XWPFPictureData画像:allPictures){ 文字列の前に = append.getRelationId(画像) // 将原文档中的图片加入到目标文档中 文字列の後= src.addPictureData(picture.getData()、Document.PICTURE_TYPE_PNG)。 map.put(前、後)。 } appendBody(src1Body、src2Body、NULL ); } プライベート 静的 ボイド appendBody(CTBody SRC、CTBodyアペンド、地図<文字列、文字列>マップ)スロー例外{ XmlOptions optionsOuter = 新しいXmlOptionsを(); optionsOuter.setSaveOuter(); ストリングappendString = append.xmlText(optionsOuter)。 ストリングsrcString = src.xmlText()。 文字列の接頭辞 = srcString.substring(0、srcString.indexOf( ">")+ 1 )。 ストリングmainPart = srcString.substring(srcString.indexOf( ">")+ 1、srcString.lastIndexOf( "<" )); ストリングsufix = srcString.substring(srcString.lastIndexOf( "<" )); ストリングaddPart = appendString.substring(appendString.indexOf( ">")+ 1、appendString.lastIndexOf( "<" )); もし(マップ!= nullの &&!map.isEmpty()){ // 对XML字符串中图片ID进行替换 のため(のMap.Entry <文字列、 addPart = addPart.replace(set.getKey()、set.getValue()); } } // 将两个文档的XML内容进行拼接 CTBody makeBody = CTBody.Factory.parse(接頭辞+ addPart + mainPart + sufix); src.set(makeBody); } プライベート 静的 無効 getAllFile(最終一覧<ファイル> subFileList、ファイルfileRoot){ fileRoot.listFiles(新しいFileFilterの(){ @Override 国民は ブール受け入れる(ファイルのファイル) { 場合(file.isDirectory()){ getAllFile(subFileList、ファイル); リターン はfalse; } 他{ 場合(。)file.getName(endsWith( "DOCX。" )){ subFileList.add(ファイル)。 } を返す 偽。 } } })。 } }