Java实现合并word文档的示例代码
更新时间:2022年08月10日 14:49:30 作者:江西-吴彦祖
在做项目中,经常会遇到一种情况,需要将一个小word文档的内容插入到一个大word(主文档)中。本文就为大家准备了Java实现合并word文档的方法,需要的可以参考一下
说明
在做项目中,遇到了一种情况,需要将一个小word文档的内容插入到一个大word(主文档)中。
实现
1.首先定义好主文档
在主文档需要插入小word文档的位置上添加一个书签,这个书签名字要记住,后面要用。
2.定义需要追加的文档
3. 代码实现
package com.test.word; import com.aspose.words.Body; import com.aspose.words.Bookmark; import com.aspose.words.BookmarkCollection; import com.aspose.words.CompositeNode; import com.aspose.words.Document; import com.aspose.words.DocumentBuilder; import com.aspose.words.ImportFormatMode; import com.aspose.words.Node; import com.aspose.words.NodeImporter; import com.aspose.words.Orientation; import com.aspose.words.PaperSize; import com.aspose.words.Section; public class Test1 { public static void main(String[] args) { try { //主文档 Document mainDocument = new Document("F:\\test\\main.docx"); //需要进行追加的文档 Document addDocument = new Document("F:\\test\\add.docx"); //第四个参数是书签名,需要和步骤1在大word文档中定义的书签名对上 appendDocument(mainDocument, addDocument, true, "shuqian1"); System.out.println("成功!"); //将最终合并完成后的文档对象保存到文件中 mainDocument.save("F:\\test\\result.docx"); } catch (Exception e) { e.printStackTrace(); } } /** * @Description 文档拼接 * @param mainDoc 主文档 * @param addDoc 要拼接的文档 * @param isPortrait 是否横向拼接 * @param bookmark 书签名称,将add文档拼接到主文档哪个位置 */ public static void appendDocument(Document mainDoc, Document addDoc, boolean isPortrait, String bookmark) { DocumentBuilder builder = null; try { builder = new DocumentBuilder(mainDoc); BookmarkCollection bms = mainDoc.getRange().getBookmarks(); Bookmark bm = bms.get(bookmark); if (bm != null) { builder.moveToBookmark(bookmark, true, false); builder.writeln(); builder.getPageSetup().setPaperSize(PaperSize.A4); if (isPortrait) { builder.getPageSetup().setOrientation(Orientation.PORTRAIT); } else { builder.getPageSetup().setOrientation(Orientation.LANDSCAPE); } Node insertAfterNode = builder.getCurrentParagraph().getPreviousSibling(); insertDocumentAfterNode(insertAfterNode, mainDoc, addDoc); } } catch (Exception e) { e.printStackTrace(); } } /** * @Description * @param insertAfterNode 插入的位置 * @param mainDoc 主文档 * @param srcDoc 要拼接进去的文档 * @Return void */ @SuppressWarnings("rawtypes") private static void insertDocumentAfterNode(Node insertAfterNode, Document mainDoc, Document srcDoc) throws Exception { if (insertAfterNode.getNodeType() != 8 && insertAfterNode.getNodeType() != 5) { throw new Exception("The destination node should be either a paragraph or table."); } else { CompositeNode dstStory = insertAfterNode.getParentNode(); Body body = srcDoc.getLastSection().getBody(); while (null != body.getLastParagraph() && !body.getLastParagraph().hasChildNodes()) { srcDoc.getLastSection().getBody().getLastParagraph().remove(); } NodeImporter importer = new NodeImporter(srcDoc, mainDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING); int sectCount = srcDoc.getSections().getCount(); for (int sectIndex = 0; sectIndex < sectCount; ++sectIndex) { Section srcSection = srcDoc.getSections().get(sectIndex); int nodeCount = srcSection.getBody().getChildNodes().getCount(); for (int nodeIndex = 0; nodeIndex < nodeCount; ++nodeIndex) { Node srcNode = srcSection.getBody().getChildNodes().get(nodeIndex); Node newNode = importer.importNode(srcNode, true); dstStory.insertAfter(newNode, insertAfterNode); insertAfterNode = newNode; } } } } }
4. 成果展示
到此这篇关于Java实现合并word文档的示例代码的文章就介绍到这了,更多相关Java合并word文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
mybatis-plus自带QueryWrapper自定义sql实现复杂查询实例详解
MyBatis-Plus是一个MyBatis(opens new window)的增强工具,在 MyBatis的基础上只做增强不做改变,MyBatis可以无损升级为MyBatis-Plus,这篇文章主要给大家介绍了关于mybatis-plus自带QueryWrapper自定义sql实现复杂查询的相关资料,需要的朋友可以参考下2022-10-10SpringBoot做junit测试的时候获取不到bean的解决
这篇文章主要介绍了SpringBoot做junit测试的时候获取不到bean的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09httpclient模拟post请求json封装表单数据的实现方法
下面小编就为大家带来一篇httpclient模拟post请求json封装表单数据的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-12-12
最新评论