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文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
IntelliJ IDEA中SpringBoot项目通过devtools实现热部署的方法
这篇文章主要介绍了IntelliJ IDEA中SpringBoot项目通过devtools实现热部署的方法,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2018-08-08关于jd-gui启动报This program requires Java 1.8+的错误问题及解决方法
最近,在Mac使用上JD-GUI启动时总是报错,接下来通过本文给大家介绍关于jd-gui启动报this program requires Java 1.8+的错误问题及解决方法,需要的朋友可以参考下2022-05-05javaweb 国际化:DateFormat,NumberFormat,MessageFormat,ResourceBu
本文主要介绍javaWEB国际化的知识,这里整理了详细的资料及实现代码,有兴趣的小伙伴可以参考下2016-09-09mybatis-plus 新增/修改如何实现自动填充指定字段
这篇文章主要介绍了mybatis-plus 新增/修改实现自动填充指定字段方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06关于SpringBoot3.x中spring.factories功能被移除的解决方案
这篇文章主要介绍了SpringBoot3.x中spring.factories功能被移除的解决方案,在配置好相关依赖、最小启动类和配置之后,发现项目无法启动,于是根据启动上下文日志和按行DEBUG找到原因并且在等待组件升级兼容之前进行临时性解决,需要的朋友可以参考下2022-12-12sql于navicat中能运行在mybatis中不能运行的解决方案
这篇文章主要介绍了sql于navicat中能运行在mybatis中不能运行的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01Spring boot route Controller接收参数常用方法解析
这篇文章主要介绍了Spring boot route Controller接收参数常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-10-10
最新评论