Java实现合并word文档的示例代码
短信预约 -IT技能 免费直播动态提醒
说明
在做项目中,遇到了一种情况,需要将一个小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();
}
}
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();
}
}
@SuppressWarnings("rawtypes")
private static void insertDocumentAfterNode(Node insertAfterNode, Document mainDoc, Document class="lazy" data-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 = class="lazy" data-srcDoc.getLastSection().getBody();
while (null != body.getLastParagraph() && !body.getLastParagraph().hasChildNodes())
{
class="lazy" data-srcDoc.getLastSection().getBody().getLastParagraph().remove();
}
NodeImporter importer = new NodeImporter(class="lazy" data-srcDoc, mainDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
int sectCount = class="lazy" data-srcDoc.getSections().getCount();
for (int sectIndex = 0; sectIndex < sectCount; ++sectIndex)
{
Section class="lazy" data-srcSection = class="lazy" data-srcDoc.getSections().get(sectIndex);
int nodeCount = class="lazy" data-srcSection.getBody().getChildNodes().getCount();
for (int nodeIndex = 0; nodeIndex < nodeCount; ++nodeIndex)
{
Node class="lazy" data-srcNode = class="lazy" data-srcSection.getBody().getChildNodes().get(nodeIndex);
Node newNode = importer.importNode(class="lazy" data-srcNode, true);
dstStory.insertAfter(newNode, insertAfterNode);
insertAfterNode = newNode;
}
}
}
}
}
4. 成果展示
到此这篇关于Java实现合并word文档的示例代码的文章就介绍到这了,更多相关Java合并word文档内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341