Apache POI 内の文字列の置換に関して小さな問題があります。
private static HWPFDocument replaceText(HWPFDocument doc, String findText, String replaceText) {
Map<String, Range> ranges = new HashMap<String, Range>();
ranges.put("COMMENTS", doc.getCommentsRange());
ranges.put("ENDNOTE", doc.getEndnoteRange());
ranges.put("FOOTNOTE", doc.getFootnoteRange());
ranges.put("HEADERSTORY", doc.getHeaderStoryRange());
ranges.put("MAINTEXT", doc.getMainTextboxRange());
ranges.put("OVERALL", doc.getOverallRange());
ranges.put("DEFAULT", doc.getRange());
for (Entry<String, Range> e : ranges.entrySet()) {
Range r = e.getValue();
for (int i = 0; i < r.numSections(); ++i) {
Section s = r.getSection(i);
for (int j = 0; j < s.numParagraphs(); j++) {
Paragraph p = s.getParagraph(j);
for (int k = 0; k < p.numCharacterRuns(); k++) {
CharacterRun run = p.getCharacterRun(k);
String text = run.text();
if (text.contains(findText)) {
System.out.println("OLD:" + run.text());
run.replaceText(findText, replaceText);
System.out.println("NEW:" + run.text());
}
}
}
}
}
return doc;
}
これは、すべてのケースの 99% 以内で正常に動作しますが、1 つのケースでは、次のように文字が切り取られます: 私の sysoutput では、次のように正しく表示されます。
OLD:CUSTOMER_ROW1
NEW:Try and Error customer
しかし、作成された Word ドキュメントでは、次のようにしか表示されません。
rror customer
私にとっては、印刷された置き換えられたテキストのサイズが置き換えられるテキストのサイズと等しいため、置き換えによってこの CharacterRun のサイズが拡大されず、(最初から) すべてが切り取られているように見えます。
参考までに: 他の置換ケースでは、10 文字の長さのパターンを 500 文字を超えるテキストに置き換えても問題なく動作しました。
これまでに誰かがそのような問題を抱えていて、私を助けることができますか? 私は使用していますPOI 3.17