私にとっては、期待どおりに機能しませんでした(毎回)。私の場合、テキストで「${PLACEHOLDER}」を使用しました。最初に、Apache Poi が Runs で反復処理する各段落をどのように認識するかを確認する必要があります。 run は、同じフォント スタイル/フォント サイズ/色/太字/斜体などの一連の文字列です。このようにすると、プレースホルダーが部分に分割される場合や、段落全体が 1 つの 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の直後に追加しました。
そうすれば、プレースホルダーは別の実行として認識されます->特定のプレースホルダーを置き換えることができ、処理されたドキュメントでは太字がなく、プレーンテキストのみになります。
私にとって追加の利点の 1 つは、テキスト内のプレースホルダーを視覚的にすばやく見つけることができることです。したがって、最終的に上記のループは次のようになります。
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);
}
}
私はそれに多くの時間を費やしていますが、それが誰かに役立つことを願っています:)