Apache POI получает разрывы строк из XWPFRun

У меня проблема с чтением пробелов из файла docx с использованием Apache POI 3.15. У меня есть документ Word с разрывами строк в нем, при чтении файла через apache poi я не могу найти способ получить эти разрывы строк. Когда я вызываю paragraph.getParagraphText(), текст возвращается с разрывами строки. Когда я перебираю объекты XWPFRun, я получаю только текст и форматирование, но не информацию о переносах строк.

Это код, который я использую. Списки br, tab, cr и разделитель всегда пусты.

        XWPFDocument document = new XWPFDocument(fis);
    List<XWPFParagraph> paragraphs = document.getParagraphs();

    for(XWPFParagraph paragraph : paragraphs) {
        //System.out.println(paragraph.getParagraphText());
        for(XWPFRun run : paragraph.getRuns()) {
            CTR ctr = run.getCTR();
            List<CTBr> brList = ctr.getBrList();
            List<CTEmpty> tabList = ctr.getTabList();
            List<CTEmpty> crList = ctr.getCrList();             
            List<CTEmpty> separatorList = ctr.getSeparatorList();
            String text = run.getText(run.getTextPosition());
            String color =run.getColor();
            boolean bold = run.isBold();
            boolean italic = run.isItalic();
            System.out.println("text: " + text + " color: " + color + " bold: " + bold + " italic: " + italic); 

            for(CTEmpty cr : crList) {
                System.out.println(cr);
            }
        }           
    }

Использует ли объект CTR для правильного пути или есть другой способ получить эти разрывы строк?

Пример Word


person Martin    schedule 20.03.2017    source источник
comment
Может быть, разрывы строк не кодируются в классах CT, а символы новой строки встроены в прогоны? Не могли бы вы приложить образец документа, в котором указана проблема?   -  person jmarkmurphy    schedule 20.03.2017
comment
Приведите образец абзаца, в котором возникает проблема.   -  person techprat    schedule 20.03.2017
comment
Отличный вопрос. В Apache poi также неясно, как перебирать элементы внутри прогона в соответствии с их естественным порядком. Например: текст, br, текст   -  person Nathan B    schedule 15.10.2020


Ответы (1)


Я нашел решение, чтобы получить разрывы строк. Обычные вводы возвращаются как собственные абзацы без текста со значением spacingAfter. Мягкий ввод внутри абзаца возвращается как разрывы через run.getCTR().getBrList

person Martin    schedule 20.03.2017
comment
Но как мы можем узнать их положение относительно текстового элемента в прогоне? Например, если у нас есть текст, br, текст, как мы можем получить список всех элементов в прогоне? - person Nathan B; 15.10.2020