docx模板Docx4j替换Java中的文本
我是Docx4j的新手,我的任务是替换docx模板的一些文本。 我阅读了docx4j的入门指南,但我认为我并不完全理解整个概念。 好吧无论如何……我已经尝试了[Docx4j的unmashalling模板] [1],它在给定的docx上运行良好,但是当我在自己的模板上尝试它时,我遇到了同样的问题。例外说,HashMap没有包含有效的键或值,因此它不会替换占位符。
我换了
通过禁用拼写检查,但它仍然无法工作……而且运行应用程序也需要相当长的时间。
在不了解Getting_Started.pdf中的数据绑定示例,所以我的选项用完了……
我怎样才能简单地从docx中替换一些String-Texts?
编辑:我发现如果我向unmarshallFromTemplate.docx添加一些文本并保存它,它不会替换新的文本行。 – 标签以某种方式分成多个标签:
My favourite ice cream is ${DEGREE}.
编辑document.xml中的Text,添加缺少的信息并没有多大帮助。
好吧无论如何这里是我使用的Template.docx的document.xml: http : //uploaded.net/file/vz4qr23o
编辑2:
好吧,伙计们 我为自己找到了一个非常合适的解决方法,并且不知道为什么花了这么长时间来解决它。 就像我说的那样:那些分裂的运行,我认为原因就是$ {}。 因此,我只是在我的占位符之前使用了一个#并重写了每个占位符,这样它就可以一次运行。
不得不切换几次到document.xml并重写段落,但后来它工作。 然后我简单地使用了替换(占位符,xml)并替换了编组的document.xml的文本,然后我再次解组了它。 工作。 故事结束,他妈的每晚构建或映射。 谢谢
docx4j源代码已经在GitHub上存在了一段时间; svn存储库已经过时了。
等效示例现在称为VariableReplace 。 该代码更有效,但您需要自己构建它,或使用当前的每晚构建。
您可能会发现运行VariablePrepare可以解决您的问题。
占位符搜索和替换内置到docx4j的代码工作正常,但是如果你遇到了由rsid
实体分解占位符的问题,你需要确保在保存“模板”时禁用语法和拼写检查(即来源)文件。 这将有助于防止文本运行变得支离破碎(请注意,您可能也想要禁用校对,因为它会在那里和任何地方插入书签标签)。
完成搜索并替换并获得新的/更新的文档后,您可以轻松地重新启用拼写检查。 此线程在RSID上有更多: 关闭rsid的生成xml中的拼写检查和语法检查