Мне нужно заменить определенный текст в документе WinWord.Проблема в том, что любая замена текста, которую я делаю в Range с помощью функции replaceText, создает поврежденный файл WinWord, если только строки замены и замены не имеют одинаковую длину.Мы будем иметь дело с динамическим контентом, поэтому это не сработает.
Спецификации объекта диапазона: http://poi.apache.org/apidocs/org/apache/poi/hwpf/usermodel/Range.html#replaceText(java.lang.String, java.lang.String)
Функция replaceText имеет необязательный третий параметр, int, чтобы указать какое-то смещение.Я подумал, может быть, это может быть решением, но параметр не может даже обработать отрицательное значение, что затрудняет или делает невозможным замену, если только смещение (replace.length () - replace.length ()) не является положительным.Однако мне может понадобиться, чтобы он был отрицательным.В любом случае, ничто в документации не может указывать на то, что этот параметр смещения необходим, если два других параметра не равны по длине.
Вот мой код: (скажем, a.doc просто содержит "caaaaaaake")
String inputFilename = "C:\\\a.doc";
String outputFilename = "C:\\b.doc";
POIFSFileSystem fs = null;
FileInputStream fis = new FileInputStream(inputFilename);
fs = new POIFSFileSystem(fis);
HWPFDocument doc = new HWPFDocument(fs);
Range range = doc.getRange();
range.replaceText("caaaaaaake", "piiiie");
FileOutputStream fos = new FileOutputStream(outputFilename);
doc.write(fos);
fis.close();
fos.close();
Код выполняется без проблем, но создает файл с разбитым словом.Что я могу сделать?