我刚刚在docx4j 2.8.1的VariableReplace示例中遵循了第2步,它所做的一切就是删除变量标记$ {}。
我做的步骤:
我只期待'TEST',并且在输出文档中没有标记时只获得'变量'。
答案 0 :(得分:22)
毫无疑问,Word会在运行中使用语法或拼写标记分割您的“变量”。
进行修复在实例化WordprocessingMLPackage之后放入此行:
VariablePrepare.prepare(wordMLPackage);
然后,您可以使用映射替换变量。
答案 1 :(得分:1)
我意识到这是一个旧帖子,但是对于其他偶然发现这个问题的人来说,如果你的HashMap中有不正确的“键”,你可以得到这个结果的另一个原因。所以在我的情况下,我使用旧的xml格式作为关键,如
.put("<variable/>","TEST");
当我应该使用时:
.put("variable","TEST");
文档本身使用的标签如
${variable}
如果找到匹配项,VariableReplace代码将删除$ {}格式。因此,如果找不到匹配项,那么由于某种原因,密钥可能与文档中的密钥不匹配,这可能与VariablePrepare没有严格的关系。但这对我来说是一个非常有用的帖子,因为VariablePrepare,VariableReplace解决方案现在正在为我的目的而工作。
另外,我不确定即使是VariablePrepare也可以处理文档中标记中间更改字体,突出显示或其他格式的情况。在这种情况下,它将无法将标记合并到单个运行中,因此标记识别可能会失败。
答案 2 :(得分:0)
不能替换变量的主要原因是:
使用${name}
之类的纯文本,而不是MERGEFIELD字段类型。
这是如何将MERGEFIELD添加到文档中的链接-https://www.systemonesoftware.com/en/support/article/38-merge-fields-in-word-for-windows
您还可以将docx-stamper与SpEL结合使用-https://github.com/thombergs/docx-stamper