我有以下情况,需要一些建议:
用户将输入word文档作为模板,并在运行时提供一些参数,以便我可以查询我的数据库并获取数据来填充文档。 所以,我需要做两件事:
这样做最好的方法是什么?我现在设法做了替换部分,使用unmarshallfromtemplate为它提供一个hashmap。 但这种方式有点棘手,因为我需要在文档中添加“$ {variable_name}”,有时单词会在不同的标记中分隔“$ {”和“}”,从而导致问题。
我已经了解了自定义xml绑定,但完全不了解它。我需要生成一个自定义XML,将其注入文档(所有这些un运行时)并调用applybindings ??如果这是真的,我如何将文档中的字段绑定到xml?按名字?
答案 0 :(得分:6)
docx4j包含VariablePrepare,它可以整理你的输入docx,这样你的密钥就不会分开运行。
但是,您仍然可以更好地切换到内容控制数据绑定,特别是如果您有重复数据(例如,考虑发票中的订单项)。 披露:我在docx4j中支持这种方法。
采用内容控制数据绑定方法:
想出一种对您的数据有意义的XML格式,并编写一些代码将数据库查询的结果转换为该格式。
修改模板,以便内容控件绑定到XML文档中的元素。通常你会使用authoring add-in for Word来帮助解决这个问题。 (Microsoft用于绑定的技术是XPath,因此绑定方式取决于您的XML结构,但是,您通常会绑定到元素名称或ID)。
现在您拥有XML文件和合适的intput docx,ContentControlsMergeXML包含在运行时创建实例文档所需的代码。对于https://github.com/plutext/OpenDoPE-WAR
作为1&的替代品2,当前的nightlies中还有org.docx4j.model.datastorage.migration.FromVariableReplacement,它可以转换你现有的“$ {”文档。仅限于标准化的目标XML格式。
如果您还有其他问题,可以在http://www.docx4java.org/forums/data-binding-java-f16/
上找到专门讨论此主题的论坛