Я разработал код 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());
}
}
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Заранее спасибо!