docx模板Docx4j替换Java中的文本

时间:2013-04-16 11:19:11

标签: java templates text replace docx4j

我是Docx4j的新手,我的任务是替换docx模板的一些文本。 我阅读了docx4j的入门指南,但我认为我并不完全理解整个概念。 好吧无论如何......我已经尝试过[Docx4j的解组模板] [1], 这对于给定的docx工作得很好,但是当我在自己template上尝试时,我遇到了同样的问题 异常说,HashMap不包含有效的键或值,因此它不会替换占位符。

我替换了

<w:proofErr w:type="spellEnd"/>

通过禁用拼写检查,但它仍然无效...而且运行应用程序也需要相当长的时间。

在不理解Getting_Started.pdf中的数据绑定示例中,所以我的选项用完了......

如何从docx中简单地替换一些String-Texts?

编辑: 我发现如果我向unmarshallFromTemplate.docx添加一些Text并保存它,它就不会替换新的文本行。 - 标签以某种方式分成多个标签:

<w:p w:rsidR="002512F8" w:rsidRDefault="002512F8" w:rsidP="002512F8"><w:r><w:t>My</w:t></w:r><w:r w:rsidR="001A5174"><w:t xml:space="preserve"> favourite ice cream is ${DEGREE</w:t></w:r><w:r><w:t>}.</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/></w:p>

编辑document.xml中的T​​ext,添加缺少的信息对此没什么帮助。

好吧无论如何这里是我使用的Template.docx的document.xml: http://uploaded.net/file/vz4qr23o

编辑2:

好吧,伙计们。我为自己找到了一个非常合适的解决方法,并且不知道为什么花了这么长时间来解决它。 正如我所说的那样:分裂的运行,我认为原因是$ {}。因此,我只是在占位符之前使用了一个#并重写了每个占位符,这样它就可以一次运行。

必须多次切换到document.xml并重写段落,但之后才能正常工作。然后我简单地使用了替换(占位符,xml)并替换了编组的document.xml的文本,然后我再次解组了它。 工作。故事结束,他妈的每晚构建或映射。 THX

2 个答案:

答案 0 :(得分:2)

docx4j源代码已经在GitHub上存在了一段时间; svn存储库已经过时了。

等效样本现在称为VariableReplace。该代码效率更高,但您需要自己构建它,或使用当前的每晚构建。

您可能会发现正在运行VariablePrepare解决您的问题。

答案 1 :(得分:1)

占位符搜索和替换内置到docx4j的代码工作正常,但是如果您遇到问题,占位符被rsid实体分解,则需要确保您已禁用语法和拼写检查保存“模板”(即源文件)时。这将有助于防止您的文本运行变得支离破碎(请注意,您可能也想禁用校对,因为它会在那里和任何地方插入书签标签)。

完成搜索并替换并获得新的/更新的文档后,您可以轻松地重新启用拼写检查。此线程在RSID上有更多内容:turnoff rsid's spell check & grammar check in generated xml