Добрый день, помогите исправить, суть такая есть исходный документ (шаблон) его нужно изменять, меняя часть шаблонного текста на нужную, но проблема в том, что
`for (XWPFParagraph p : doc.getParagraphs()) {
System.out.println("-----"+p.getText());
и
`for (XWPFRun r : runs) {
String text = r.getText(0);`
отличаются, т.е. runs разбивает входящую строку параграфа и не получается проверить на вхождение и заменить участок нужного теста. Пример кода
public static void ChengePattern(Paragraphs paragraphs) throws FileNotFoundException, IOException, InvalidFormatException {
XWPFDocument doc = new XWPFDocument(OPCPackage.open("fileName.docx"));
for (XWPFParagraph p : doc.getParagraphs()) {
//System.out.println("-----"+p.getText());
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
for (XWPFRun r : runs) {
String text = r.getText(0);
if (text != null && text.contains("Name")) {
text = text.replace("Name", paragraphs.address);
r.setText(text, 0);
}
else if (text != null && text.contains("Address")) {
text = text.replace("Address", paragraphs.address);
r.setText(text, 0);
}
}
}
}
doc.write(new FileOutputStream("path\\output.docx"));
}
пробовал собирать runs стрингбилдером, и заменять в нем нужную часть текста и вставлять в Runs, но лучшее чего смог добиться это просто вставка нужного мне теста в позицию шаблонного текста с сохранением исходной.
public static void ChengePattern(Paragraphs paragraphs) throws FileNotFoundException, IOException, InvalidFormatException {
XWPFDocument doc = new XWPFDocument(OPCPackage.open("fileName.docx"));
for (XWPFParagraph p : doc.getParagraphs()) {
//System.out.println("-----"+p.getText());
List<XWPFRun> runs = p.getRuns();
StringBuilder sb = new StringBuilder();
if (runs != null) {
for (XWPFRun r : runs) {
String text = r.getText(0);
sb.append(r.getText(r.getTextPosition()));
System.out.println(sb.toString());
if (sb.toString().contains("Name")) {
text = sb.toString().replace("Name", paragraphs.subscriber);
r.setText(text, 0);
}
else if (sb.toString().contains("Address")) {
text = sb.toString().replace("Address", paragraphs.address);
r.setText(text, 0);
}
}
}
doc.write(new FileOutputStream("path\\output.docx"));
}
}
Для понятности приведу примеры
System.out.println(System.out.println("-----"+p.getText());
результат
-----Приложение №1 к ТУ № -----Т Е Х Н И Ч Е С К И Е Т Р Е Б О В А Н И Я -----на присоединение эл.установок 0,4 кВ -----трехэтажного административного комплекса -----Выданы: Name. -----Место расположения объекта: Address.
if (runs != null) {
for (XWPFRun r : runs) {
String text = r.getText(0);
System.out.println("------"+text);
------null ------Приложение №1 ------ к ТУ №
------Т Е Х Н И Ч Е С К И Е Т
------Р
------Е
------Б
------О
------В
------А
------Н
------И
------Я
------на ------присоединение ------эл.установок ------ 0,
------4
------кВ ------трехэтажн ------ого ------ административн ------ого ------ комплекс ------а
как видно, runs дробит текст в строке параграфа. и результат лучшего варианта на данный момент
Приложение №1 к ТУ № Т Е Х Н И Ч Е С К И Е Т Р Е Б О В А Н И Я на присоединение эл.установок 0,4 кВ трехэтажного административного комплекса Выданы: NameВыданы:paragraphs.subscriber Место расположения объекта: AddressМесто расположения объекта:paragraphs.address
Вроде бы, можно удалить изначальную строку шаблона и вставить свою, но проблема в том, что не сохраняется форматирование текста, (выделение жирным, шрифты).
Свежие комментарии