Заменить текст абзаца HWPFDocument, используя Java результаты странный вывод
Я требую заменить HWPFDocument
paragraph
текст .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 аварийно завершить работу сгенерированного выходного файла.