Заменить текст абзаца HWPFDocument, используя Java результаты странный вывод

Я требую заменить HWPFDocumentparagraph текст .doc файл, если он содержит определенный текст, используя java, Он заменяет текст. Но процесс записывает выходной текст странным образом. Пожалуйста, помогите мне исправить эту проблему. Используемый фрагмент кода:

public static HWPFDocument processChange(HWPFDocument doc)
{
    try
    {
        Range range = doc.getRange();
        for (int i = 0; i < range.numParagraphs(); i++)
        {
            Paragraph paragraph = range.getParagraph(i);
            if (paragraph.text().contains("Place Holder"))
            {
                String text = paragraph.text();
                paragraph.replaceText(text, "*******");

            }
        }
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
    return doc;
}

Входные данные:

Place Holder 
Textvalue1
Textvalue2
Textvalue3

Выход:

*******Textvalue1
Textvalue1
Textvalue2
Textvalue3

1 ответ

Решение

Библиотека HWPF не в идеальном состоянии для изменения / записи файлов.doc. (По крайней мере, в последний раз, когда я смотрел. Некоторое время назад я разработал собственный вариант HWPF для своего клиента, который, среди прочего, обеспечивает правильные операции замены и сохранения, но эта библиотека не является общедоступной.)

Если вам абсолютно необходимо использовать файлы.doc и Java, вы можете уйти, заменив строки одинаковой длины. Например "12345" -> "abc__" (_ быть пробелами или что-то, что работает для вас). Возможно, имеет смысл найти абсолютное местоположение заменяемой строки в файле doc (используя HWPF), а затем изменить его непосредственно в файле doc (без использования HWPF).

Формат файла Word очень сложен, и "сделать все правильно" не является тривиальной задачей. Если вы не захотите потратить много человеко-месяцев, также будет невозможно исправить часть библиотеки, чтобы просто сохранить работы. Многие структуры данных должны обрабатываться очень точно, и одно "проскальзывание" позволяет Word аварийно завершить работу сгенерированного выходного файла.

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