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中的T​​ext,添加缺少的信息并没有多大帮助。

好吧无论如何这里是我使用的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中的拼写检查和语法检查