使用Apache poi解析word文档为html文件时出现空指针异常:

org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerException
at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:77)
at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.doConvert(XHTMLConverter.java:63)
at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.doConvert(XHTMLConverter.java:38)
at org.apache.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:61)

Caused by: java.lang.NullPointerException: null
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.getXWPFNum(XWPFDocumentVisitor.java:473)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.getNumPr(XWPFDocumentVisitor.java:340)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitParagraph(XWPFDocumentVisitor.java:285)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitBodyElements(XWPFDocumentVisitor.java:247)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTableCellBody(XWPFDocumentVisitor.java:1107)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitCell(XWPFDocumentVisitor.java:1042)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTableRow(XWPFDocumentVisitor.java:946)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTableBody(XWPFDocumentVisitor.java:887)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTable(XWPFDocumentVisitor.java:869)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitBodyElements(XWPFDocumentVisitor.java:251)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.start(XWPFDocumentVisitor.java:199)
at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:73)

格式化显示为:

org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerException
	at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:77)
	at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.doConvert(XHTMLConverter.java:63)
	at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.doConvert(XHTMLConverter.java:38)
	at org.apache.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:61)
..................
Caused by: java.lang.NullPointerException: null
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.getXWPFNum(XWPFDocumentVisitor.java:473)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.getNumPr(XWPFDocumentVisitor.java:340)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitParagraph(XWPFDocumentVisitor.java:285)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitBodyElements(XWPFDocumentVisitor.java:247)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTableCellBody(XWPFDocumentVisitor.java:1107)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitCell(XWPFDocumentVisitor.java:1042)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTableRow(XWPFDocumentVisitor.java:946)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTableBody(XWPFDocumentVisitor.java:887)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTable(XWPFDocumentVisitor.java:869)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitBodyElements(XWPFDocumentVisitor.java:251)
	at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.start(XWPFDocumentVisitor.java:199)
	at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:73)

解决:看到空指针异常,很多人首先会认为是自己的代码写错了。事实上,这是Apache组件写的很粗糙造成的,该判空的地方没有判空。这里有两个地方出现了控制异常。出现问题的地方估计就是两个了。

第一个空指针出现在RunUnderlineValueProvider类(package org.apache.poi.xwpf.converter.core.styles.run;)。看到这个U,我猜想是解析下划线或者是表格出现了错误。
在这里插入图片描述
此处在进行rPr.getU().getVal()操作时没有进行判空操作,出现了空指针异常。

解决:在自己的工程下创建一个一模一样的包,然后创建一个一模一样的类,并更改为下面代码:

package org.apache.poi.xwpf.converter.core.styles.run;
import java.util.Objects;
import org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument;
import org.apache.poi.xwpf.usermodel.UnderlinePatterns;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTUnderline;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline.Enum;
public class RunUnderlineValueProvider extends AbstractRunValueProvider<UnderlinePatterns> {
    /** INSTANCE */
    public static final RunUnderlineValueProvider INSTANCE = new RunUnderlineValueProvider();
    @Override
    public UnderlinePatterns getValue(CTRPr rPr, XWPFStylesDocument stylesDocument) {
        if (Objects.isNull(rPr)) {
            return null;
        if (rPr.isSetU()) {
            CTUnderline ctu = rPr.getU();
            if (Objects.nonNull(ctu)) {
                Enum val = ctu.getVal();
                if (Objects.nonNull(val)) {
                    return UnderlinePatterns.valueOf(val.intValue());
        return null;

第二个空指针出现在XWPFDocumentVisitor类(package org.apache.poi.xwpf.converter.core;),下面的红框内即是出现空指针的地方。
在这里插入图片描述
解决:在自己的工程下创建一个一模一样的包,然后创建一个一模一样的类,并修改图示代码为:

    protected XWPFNum getXWPFNum(CTNumPr numPr) {
        CTDecimalNumber numID = numPr.getNumId();
        if (Objects.isNull(numID)) {
            return null;
        XWPFNumbering numbering = document.getNumbering();
        if (Objects.isNull(numbering)) {
            return null;
        XWPFNum num = numbering.getNum(numID.getVal());
        return num;

两处包名为:
在这里插入图片描述

Apache POI解析word为html出现:......converter.core.XWPFConverterException: java.lang.NullPointerException 使用Apache poi解析word文档为html文件时出现空指针异常:报错一:org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerExceptionat org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLC...
org.apache.poi:poi:4.1.2 org.apache.poi:poi-ooxml:4.1.2 org.apache.poi:poi-ooxml-schemas:4.1.2 org.apache.xmlbeans:xmlbeans:3.1.0 com.github.virtuald:curvesapi:1.06 com.zaxxer:SparseBitSet:1.2 commons-codec:commons-codec:1.13 org.apache.commons:commons-collections4:4.4 org.apache.commons:commons-math3:3.6.1 org.apache.commons:commons-compress:1.19
最近被word逼疯,不仅要导出各种报告,还要附带表格,所以写了一个docx转pdf以供参考。创建docx导出表格的时候遇到的问题完整的代码 之前用XWPFDocument生成的docx在转pdf的时候总是会报java.lang.IllegalStateException: Expecting one Styles document part, but found 0。 转出来的pdf总是会损坏,给我气够呛,网上找了办法使用doc.createStyles(); 然后又给我报什么文件提前结束?或者SAXPar
poi docx转html遇到空指针问题或java.lang.NoClassDefFoundError: org/apache/poi/xwpf/usermodel/IRunBody
poi 3.14下报错: org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerException at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:77) at org.a
org.apache.poi.xwpf.converter.pdf-1.0.6.jar 文件 org.apache.poi.xwpf.converter.pdf-1.0.6 org.apache.poi.xwpf.converter.core-1.0.6 org.apache.poi.xwpf.converter-0.9.1 SpringBoot 打包:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.6:resource 19298 Apache POI解析word为html出现:......converter.core.XWPFConverterException: java.lang.NullPointerException 机智的小渔夫: 这个文中有说明呀,建立一个一模一样类,包名也一样,然后修改NPE的地方,最后会直接代理过去的 Apache POI解析word为html出现:......converter.core.XWPFConverterException: java.lang.NullPointerException BobAndMac: 博主好,XWPFDocumentVisitor这个class里面的document,如何解决? Apache POI解析word为html出现:......converter.core.XWPFConverterException: java.lang.NullPointerException BobAndMac: 我也遇到了这个问题,请问如何解决?