Я использую Apache POI для создания файлов docx из шаблона.Кажется, не существует очевидного способа заменить весь текст в абзаце, и документации довольно мало.Прямо сейчас я могу читать документ, циклически просматривая его абзацы, затем циклически просматривая прогоны каждого абзаца, затем циклически повторяя текст каждого прогона ... Это работает довольно хорошо, и я могу заменить содержимое текста в прогоне, но мойшаблонные заполнители (пример: <>) могут быть разбиты на несколько прогонов, что усложняет сопоставление и замену.Есть ли способ установить содержимое XWPFParagraph?Или, по крайней мере, способ убрать все прогоны в абзаце и создать мои собственные прогоны?
Вот что у меня есть:
public static void main(String[] args) {
InputStream fs = null;
try {
fs = new FileInputStream("C:\\sample1.docx");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
XWPFDocument doc = null;
try {
doc = new XWPFDocument(fs);
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < doc.getParagraphs().length; i++) {
XWPFParagraph paragraph = doc.getParagraphs()[i];
paragraph.getCTP().getRArray().
// This will output the paragraph's contents.
System.out.println(paragraph.getParagraphText());
for (int j = 0; j < paragraph.getCTP().getRArray().length; j++) {
CTR run = paragraph.getCTP().getRArray()[j];
for (int k = 0; k < run.getTArray().length; k++) {
CTText text = run.getTArray()[k];
// This will output the text contents
System.out.println(text.getStringValue());
// And this will set its contents
text.setStringValue("Success!");
}
}
}
try {
doc.write(new FileOutputStream("C:\\output.docx"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}