Я пытаюсь использовать этот код (POI 3,11) для извлечения текста из DOCX файла:POI игнорируя некоторые фрагменты DOCX
XWPFDocument doc = new XWPFDocument(OPCPackage.open("sample.docx"));
for (XWPFParagraph p : doc.getParagraphs()) {
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
for (XWPFRun r : runs) {
String text = r.getText(0);
System.out.println(text);
}
}
}
Вот файл document.xml внутри sample.docx:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
<w:body>
<w:p>
<w:pPr>
<w:pStyle w:val="Normal"/>
<w:rPr/>
</w:pPr>
<w:bookmarkStart w:id="0" w:name="__DdeLink__59_1605705532"/>
<w:bookmarkEnd w:id="0"/>
<w:r>
<w:rPr/>
<w:t>A</w:t> // THIS PRINT!
<w:tab/>
<w:t>B</w:t> // THIS IS NOT! WHY?!
</w:r>
</w:p>
<w:sectPr>
<w:type w:val="nextPage"/>
<w:pgSz w:h="16838" w:w="11906"/>
<w:pgMar w:bottom="1134" w:footer="0" w:gutter="0" w:header="0" w:left="1134" w:right="1134" w:top="1134"/>
<w:pgNumType w:fmt="decimal"/>
<w:formProt w:val="false"/>
<w:textDirection w:val="lrTb"/>
<w:docGrid w:charSpace="4294961151" w:linePitch="240" w:type="default"/>
</w:sectPr>
</w:body>
</w:document>
Когда я запускаю код, это приведет к последующей деятельности:
A
Я не ип что по неизвестным причинам некоторые фрагменты (буква B) из текста игнорируются (если я открываю файл с помощью LibreOffice, он успешно показывается).
Вас интересует только распечатка содержимого пробега? Если это так, [XWPFRun.text()] (https://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFRun.html#text%28%29), вероятно, вы хотите позвонить - который обрабатывает преобразование новых строк/tabs/etc в их текстовые эквиваленты и возвращает весь запуск как строку – Gagravarr
Как ни странно, я не мог найти этот метод в классе XWPFRun ... но XWPFParagraph.getText() делает то же самое ... Однако Я получаю доступ к тексту в «run level», чтобы изменить его с старого на новый. – dellasavia
Попробуйте обновить - похоже, что это было добавлено в Apache POI 3.12 beta 1 или попробуйте использовать XWPFRun.toString() для чего-то примерно похожего на 3.11 – Gagravarr