为了账号安全,请及时绑定邮箱和手机立即绑定

当点位于占位符内时,在页眉/页脚中使用 Apache POI 替换文本不起作用

当点位于占位符内时,在页眉/页脚中使用 Apache POI 替换文本不起作用

慕丝7291255 2022-12-21 12:01:14
我使用 templ4docx/Apache POI (2.0.3/3.17)。在那里你可以像这样设置一个 VariablePatten :private static final String START_PATTERN = "#{";private static final String END_PATTERN = "}";...targetDocx.setVariablePattern(new VariablePattern(START_PATTERN, END_PATTERN));当我使用带点的占位符时,它在页眉/页脚中不起作用。在带点的 Body 中它有效。图像也适用于占位符和内部点!Example in Word-Template:#{Person.Name} // works in Body NOT in Header/Footer!#{Person.Name} // works in Body and Header/Footer!#{Person} // works in Body and Header/Footer!#{Image.Name} // works in Body and Header/Footer! Here i use ImageVariable instead of Textvariable.我调试代码,看到“run.setText()”是用正确的文本调用的,但在最终文档中却不是。@Overridepublic void insert(Insert insert, Variable variable) {    if (!(insert instanceof TextInsert)) {        return;    }    if (!(variable instanceof TextVariable)) {        return;    }    TextInsert textInsert = (TextInsert) insert;    TextVariable textVariable = (TextVariable) variable;    for (XWPFRun run : textInsert.getParagraph().getRuns()) {        String text = run.getText(0);        if (StringUtils.contains(text, textInsert.getKey().getKey())) {            text = StringUtils.replace(text, textVariable.getKey(), textVariable.getValue());            if (text.contains("\n")) {                String[] textLines = text.split("\n");                run.setText(textLines[0], 0);                for (int i = 1; i < textLines.length; i++) {                    run.addBreak();                    run.setText(textLines[i]);                }            } else {                run.setText(text, 0);            }        }    }}有什么想法为什么它不能与占位符“#{Person.Name}”一起用作页眉/页脚中的 TextVariable?但它适用于“#{PersonName}”和 ImageVariable“#{Images.Logo1}”???
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

看起来 Word 有时会分隔占位符,因此您只能在运行中找到部分占位符。

在“TextInsertStrategy”类中,我检查拆分占位符的运行循环并相应地处理它。这样我就可以解决问题了。


查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信