如何在XWPFDocument中使用一个模板用于Java中的多个页面

时间:2016-02-12 08:02:28

标签: apache apache-poi openxml docx xwpf

我想知道,如何重复使用一个模板(内部有一个页面和一些变量)多次XWPFDocument个对象。

我的想法是:

  • XWPFDocument中将模板加载一次作为模板对象
  • 克隆/创建/复制模板对象及其所有样式和标题等
  • 用内容填充克隆
  • 将此克隆添加到目标 - XWPFDocument

我只为一个页面完成了这项工作。 当我尝试克隆/创建/复制模板对象时,它将失去所有的样式信息。

How to copy a paragraph of .docx to another .docx withJava and retain the style

How to copy some content in one .docx to another .docx , using POI without losing format?

2 个答案:

答案 0 :(得分:2)

POI可能不支持开箱即用,但我在我的项目poi-mail-merge中做了类似的事情,它与底层XML一起工作,重复替换模板Microsoft Word文档中的标记并组合结果到一个结果文件。

因此它基本上将模板文档多次复制到生成的文档中。

请参阅here我是如何在那里完成的,基本上我处理XML正文文本并在那里进行替换/更改,然后将其附加到结果文档中。

答案 1 :(得分:0)

POI Mail Merge在其他情况下可以提供帮助,但就我而言,它不起作用。

我的解决方法是首先将我的模板 - XWPFDocument更新为所需的结构,暂时保存并将其重新读回XWPFDocument - 对象。

这里的步骤:

  • 将模板文件读入XWPFDocument
  • 从数据文件中读取记录,例如CSV
  • 计算与数据记录相关的页数
  • 从模板中获取Bodyelements-Objects - XWPFDocument
  • 在模板中创建新的Bodyelements(取决于页数) - XWPFDocument并用我们之前获得的相同对象替换它们
  • 保存更新的模板 - 暂时XWPFDocument
  • 将临时保存的模板读入XWPFDocument
  • 替换所有占位符并使用CSV-Data
  • 填充它们

希望这有助于某人