在做项目中,经常会遇到一种情况,需要将一个小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文档内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:Java实现合并word文档的示例代码
基础教程推荐
猜你喜欢
- java实现多人聊天系统 2023-05-19
- Java文件管理操作的知识点整理 2023-05-19
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- Java数据结构之对象比较详解 2023-03-07
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- java基础知识之FileInputStream流的使用 2023-08-11
- Java并发编程进阶之线程控制篇 2023-03-07
- Java实现查找文件和替换文件内容 2023-04-06
- Java实现线程插队的示例代码 2022-09-03
- springboot自定义starter方法及注解实例 2023-03-31