如何在java中将页面从一个docx复制到另一个docx

时间:2018-04-16 19:04:38

标签: java ms-word automation document docx4j

我正在尝试自动化docx报告生成过程。为此,我使用java和docx4j。我有一个只包含单个页面的模板文档。我想复制该页面修改它并将其保存在另一个docx文档中。输出报告是多个类似的页面,并且从模板中进行了修改。我该怎么做呢。

PS:java和docx4j是我的第一选择,但我对除java和docx4j之外的解决方案持开放态度。

2 个答案:

答案 0 :(得分:1)

让您修改模板,以下是如何将一个文档添加到另一个文档的末尾。假设base.docx包含“这是基础文档”。并且template.docx包含“时间是:”,然后执行此代码后:

WordprocessingMLPackage doc = Docx4J.load(new File("base.docx"));
WordprocessingMLPackage template = Docx4J.load(new File("template.docx"));
MainDocumentPart main = doc.getMainDocumentPart();

Br pageBreak = Context.getWmlObjectFactory().createBr();
pageBreak.setType(STBrType.PAGE);
main.addObject(pageBreak);

for (Object obj : template.getMainDocumentPart().getContent()) {
    main.addObject(obj);
}
main.addParagraphOfText(LocalDateTime.now().toString());

doc.save(new File("result.docx"));

然后result.docx将包含以下内容:

This is the base document.

^L

The time is:
2018-04-16T17:37:13.541984200

(其中^ L表示分页符。)

答案 1 :(得分:0)

  

更准确地说,我的原始模板仅包含标题和一些样式组件。

此类信息可以存储在Word样式表(.dotx文件)中。

  

PS:java和docx4j是我的首选,但是除了Java和docx4j之外,我也欢迎其他解决方案。

pxDoc是一个很好的工具:您可以在文档生成器中指定专用的样式表,也可以使用“可变样式”并仅在启动文档生成时指定样式表。