Замена текста с помощью 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

0 ответов

Другие вопросы по тегам