DOCX模板Docx4j替换Java中的文本(docx Template Docx4j replac

2019-08-31 07:57发布

进出口新的Docx4j和我的任务是替换DOCX模板的一些文字。 我读docx4j的入门指南,但我不认为我完全理解整个概念。 嗯......反正我已经尝试过[Docx4j的unmashalling模板] [1],它工作得很好与给定的docx,但后来我得到了同样的问题,当我试图在我自己的模板例外说,这HashMap的犯规包含有效的键或值,因此它不替换占位符。

我更换了

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

通过禁用拼写检查,但它仍然没有工作......这还需要相当长一段时间来运行应用程序。

在不了解的Getting_Started.pdf数据绑定例子,所以我跑出来的选项...

我怎么能简单地替换从DOCX一些字符串文本?

编辑:我发现,如果我添加一些文字到unmarshallFromTemplate.docx并保存它,它不会替换文本的新线。 的 - 标签在某种程度上分裂成多个标签:

<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中的文本,并添加缺少的信息没有帮助很大。

以及反正这里是范本.docx的使用IM的document.xml中: http://uploaded.net/file/vz4qr23o

编辑2:

好球员。 我发现我自己一个非常适合的解决方法和不知道为什么花了这么长时间来弄明白。 就像我说的:其中splited了运行,并且这样做的原因是$ {}在我看来。 所以我只是用一个#我的占位符之前和重写每一个占位符,这样它都将是一个运行。

不得不切换几次到document.xml中并重写通道,但随后的工作。 然后,我只是使用替代(占位符,XML)和更换编组document.xml中的文字,然后我再解组。 工作。 故事的结尾,他妈的每晚构建或映射。 谢谢

Answer 1:

docx4j源代码已经在GitHub现在一会儿; SVN存储已经过时了。

等效采样现在被称为VariableReplace 。 该代码是一个比较有效的,但你需要建立它自己,或者使用当前的每日构建。

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



Answer 2:

占位符查找和替换内置于docx4j工作得很好的代码,但如果你有与占位符得到打散问题rsid实体,你需要确保你有语法和拼写检查保存的“模板”禁用时(即源)文档。 这将有助于防止您的文本运行变得支离破碎(注意,你可能要禁用校对过,作为插入书签标签这里四处奔走)。

一旦你完成了搜索和替换,并有一个新的/更新的文件,你可以重新启用拼写检查很轻松了。 针对这个讨论有更多RSIDs: 倒胃口RSID的拼写检查和在生成的XML语法检查



文章来源: docx Template Docx4j replacing text in Java