对我来说,它没有像我预期的那样工作(每次)。在我的例子中,我在文本中使用了 "${PLACEHOLDER}。首先,我们需要看看 Apache Poi 如何识别我们想要使用 Runs 迭代的每个段落。如果你更深入地了解 docx 文件构造,你会知道那个run 是具有相同字体样式/字体大小/颜色/粗体/斜体等的文本字符序列。这样,占位符有时被分成几部分,或者有时整个段落被识别为一个 Run,并且不可能遍历单词。
我所做的是在模板文档中加粗占位符名称。比通过 RUN 迭代时,我能够迭代整个占位符名称${PLACEHOLDER}。当我将该值替换为
for (XWPFRun r : p.getRuns()) {
String text = r.getText(0);
if (text != null && text.contains("originalText")) {
text = text.replace("originalText", "newText");
r.setText(text,0);
}
}
我r.isBold(false);
在 setText 之后添加了。
这样,占位符被识别为不同的运行->我可以替换特定的占位符,并且在处理的文档中我没有粗体,只有纯文本。
对我来说,另一个优势是视觉上我能够更快地在文本中找到占位符。所以最后上面的循环看起来像这样:
for (XWPFRun r : p.getRuns()) {
String text = r.getText(0);
if (text != null && text.contains("originalText")) {
text = text.replace("originalText", "newText");
r.setText(text,0);
r.isBold(false);
}
}
我希望它对某人有所帮助,而我为此花费了太多时间:)