Замена текста с помощью CharacterRun в Apache POI HWPF
У меня есть небольшая проблема, касающаяся замены String в 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 % случаев, но в одном случае оно обрезает символы следующим образом: в моем выводе sy soutput он выглядит так:
OLD:CUSTOMER_ROW1
NEW:Try and Error customer
но в созданном Word-документе он отображается только как
rror customer
Для меня похоже, что замена не увеличивает размер этого CharacterRun и обрезает все (с начала), так как размер напечатанного замененного текста равен размеру заменяемого текста.
К вашему сведению: в других случаях замены я даже заменил шаблон длиной 10 символов текстом, содержащим более 500 символов, и он работал нормально.
Кто-нибудь до сих пор имел такую проблему и может мне помочь? я использую POI 3.17