Я разработал код Java, который заменяет некоторые строковые шаблоны в шаблоне, а затем генерирует выходной файл docx с использованием Apache POI. Заменить шаблоны в заголовках и абзацах было легко, но у меня возникла проблема при попытке заменить текстовые поля внутри. Я использую код, предоставленный Акселем Ритчером в Замените текст в текстовом поле docx с помощью Apache POI, но проблема в том, что он обрезает некоторые пробелы при каждом запуске.
Например:
cp -r basedir destination
Становится:
cp-r basedir destination
Часть кода, отвечающая за выполнение этой замены, следующая (параметры функции: doc_buffer - это XWPFDocument, шаблон и замена - это строки):
for (XWPFParagraph paragraph : doc_buffer.getParagraphs()) {
XmlCursor cursor = paragraph.getCTP().newCursor();
cursor.selectPath(
"declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' .//*/w:txbxContent/w:p/w:r");
List<XmlObject> ctrsintxtbx = new ArrayList<XmlObject>();
while (cursor.hasNextSelection()) {
cursor.toNextSelection();
XmlObject obj = cursor.getObject();
ctrsintxtbx.add(obj);
}
for (XmlObject obj : ctrsintxtbx) {
CTR ctr = CTR.Factory.parse(obj.toString());
XWPFRun bufferrun = new XWPFRun(ctr, (IRunBody) paragraph);
String text = bufferrun.getText(0);
if ((text != null) && (text.contains(pattern))) {
text = text.replaceAll(pattern, replacement);
bufferrun.setText(text, 0);
}
obj.set(bufferrun.getCTR());
}
}
Если вам нужна дополнительная информация, дайте мне знать.
Заранее спасибо!