我使用Apache POI創建一個.docx
文件用下面的代碼:的Java:XWPFWordExtractor.getText()拋出NullPointerException異常
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText(text);
String filePath = outputPathWithoutExtension + ".docx";
try {
FileOutputStream stream = new FileOutputStream(new File(filePath));
document.write(stream);
stream.close();
} catch (IOException exception) {
LOGGER.error("Could not create file '{}'", filePath);
}
,然後我嘗試用下面的代碼來閱讀:
FileInputStream fileStream = new FileInputStream(filePath);
try {
XWPFDocument docx = new XWPFDocument(fileStream);
XWPFWordExtractor wordExtractor = new XWPFWordExtractor(docx);
text = wordExtractor.getText();
} catch (IOException | POIXMLException | OfficeXmlFileException
| NullPointerException exception) {
LOGGER.error("Could not load file - Exception: {}", exception.getMessage());
}
在哪裏我打電話getText()
行,它拋出一個NullPointerException
:
java.lang.NullPointerException
at org.apache.poi.xwpf.extractor.XWPFWordExtractor.extractHeaders(XWPFWordExtractor.java:162)
at org.apache.poi.xwpf.extractor.XWPFWordExtractor.getText(XWPFWordExtractor.java:87)
這個問題似乎是extractText
調用extractHeaders
與XWPFHeaderFooterPolicy
的文件...在我的情況是空的。當它試圖在第一線使用它時......繁榮。
我試圖創建自己的「頁眉/頁腳政策」,例如:
try {
new XWPFHeaderFooterPolicy(document);
} catch (IOException | XmlException exception) {
LOGGER.warn("Could not create output document header - "
+ "document might not be readable in all readers");
}
然而,這本身將引發NullPointerException
,因爲它試圖通過doc.getDocument().getBody().getSectPr()
訪問「SectPr」的文件,它返回null ...然後第一次使用那個......繁榮。
所以,我的問題是:我顯然沒有正確創建XWPFDocument
...有人可以讓我平直嗎?
備註:如果我在Word中打開文件,文件看起來很好。如果在創建和讀取文件之間,我打開它,編輯它,保存並關閉它,然後getText()
的調用按預期執行,沒有NullPointerException
。 Word必須在保存時填寫適當的頁眉/頁腳策略。
看起來是一個錯誤 - 你嘗試報告爲一個bug爲[Apache的POI bug跟蹤系統(https://開頭BZ。 apache.org/bugzilla/enter_bug.cgi?product=POI)? – Gagravarr