如何使用docx4j从模板创建一个新单词

wil*_*son 4 java templates copy ms-word docx4j

我有以下场景,需要一些建议:

用户将输入word文档作为模板,并在运行时提供一些参数,以便我可以查询我的数据库并获取数据来填充文档.所以,我需要做两件基本的事情:

  1. 将文档中的每个键替换为当前查询行的相应结果.
  2. "合并"(复制?复制?)将现有文档保持不变(附加),具体取决于我从查询中获取的行数,并将此新副本中的键替换为下一行值.

这样做最好的方法是什么?我现在设法做了替换部分,使用unmarshallfromtemplate为它提供一个hashmap.但这种方式有点棘手,因为我需要在文档中添加"$ {variable_name}",有时单词会在不同的标签中分隔"$ {"和"}",从而导致问题.

我读过有关自定义xml绑定的内容,但完全不了解它.我需要生成一个自定义XML,将其注入文档(所有这些un运行时)并调用applybindings ?? 如果这是真的,我如何将文档中的字段绑定到xml?按名字?

Jas*_*ext 6

docx4j包含VariablePrepare,它可以整理你的输入docx,这样你的密钥就不会分开运行.

但是,您仍然可以更好地切换到内容控制数据绑定,特别是如果您有重复数据(例如,考虑发票中的订单项). 披露:我在docx4j中支持这种方法.

采用内容控制数据绑定方法:

  1. 梦想一种对您的数据有意义的XML格式,并编写一些代码将数据库查询的结果转换为该格式.

  2. 修改模板,以便将内容控件绑定到XML文档中的元素.通常你会使用Word创作加载项来帮助解决这个问题.(Microsoft用于绑定的技术是XPath,因此绑定方式取决于您的XML结构,但是,您通常会绑定到元素名称或ID).

  3. 现在您拥有XML文件和合适的intput docx,ContentControlsMergeXML包含在运行时创建实例文档所需的代码.在https://github.com/plutext/OpenDoPE-WAR上还有一个用于servlet环境的版本

作为1和2的替代,在当前的nightlies中还有org.docx4j.model.datastorage.migration.FromVariableReplacement,它可以转换现有的"$ {"文档.但是只有标准化的目标XML格式.

如果您还有其他问题,可以在http://www.docx4java.org/forums/data-binding-java-f16/上找到专门讨论该主题的论坛.