02
Окт
2017

XWPFRuns and XWPFParagraph Apache POI помогите исправить

Добрый день, помогите исправить, суть такая есть исходный документ (шаблон) его нужно изменять, меняя часть шаблонного текста на нужную, но проблема в том, что

`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

Вроде бы, можно удалить изначальную строку шаблона и вставить свою, но проблема в том, что не сохраняется форматирование текста, (выделение жирным, шрифты).

Источник: https://ru.stackoverflow.com/questions/725576/xwpfruns-and-xwpfparagraph-apache-poi-%D0%BF%D0%BE%D0%BC%D0%BE%D0%B3%D0%B8%D1%82%D0%B5-%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C

Тебе может это понравится...

Добавить комментарий