XHTMLConverter把docx转换html报java.lang.NullPointerException异常

一.报错

1.报错信息

java 复制代码
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:45)
    at cn.com.sinosoft.app.word.OfficeUtil.docx2Html(OfficeUtil.java:146)
    at cn.com.sinosoft.app.word.OfficeUtil.wordToPdf(OfficeUtil.java:409)
    at cn.com.sinosoft.app.word.Test.main(Test.java:68)
Caused by: java.lang.NullPointerException
    at org.apache.poi.xwpf.converter.core.utils.XWPFTableUtil.getGridColList(XWPFTableUtil.java:183)
    at org.apache.poi.xwpf.converter.core.utils.XWPFTableUtil.computeColWidths(XWPFTableUtil.java:116)
    at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.visitTable(XWPFDocumentVisitor.java:867)
    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)
    ... 6 more

2.重点报错信息

java 复制代码
org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerException

Caused by: java.lang.NullPointerException
    at org.apache.poi.xwpf.converter.core.utils.XWPFTableUtil.getGridColList(XWPFTableUtil.java:183)

3.报错代码位置

二。问题分析

我做的是docx->html->pdf转换的流程。需要在docx中插入table表。没插入之前可以正常运行,插入之后,docx到html报以上错误。

1.docx插入完之后,打开docx表格可以正常显示,但是转换html报错。于是把table表剪切出来,又粘贴进去,发现docx->html可以正常转换。疑问:docx可能帮助我做了什么,还不清楚。

2.报错CTTblGrid没有,搜了一下CTTblGrid的用途,和相关报错的前辈处理方案。于是知道了,自己在插入table在docx里边时,没有设置表格宽度。这点docx能显示,转换不行,查问题太头疼,官方jar还需要补丁一下。(或者是我版本用的太低了)

前辈文章:

解决用POI库生成的word文件中的表格在python-docx无法解析的问题_ -CSDN博客 https://blog.csdn.net/liangxiaogang5/article/details/136950154word转html过程中出现NullPointerException解决_xhtmlconverter-CSDN博客https://blog.csdn.net/qq_40707682/article/details/107343720#:~:text=%E5%B7%A5%E4%BD%9C%E4%B8%AD%E9%81%87%E5%88%B0XHTMLConverter.getInstance%20%28%29.convert%20%28document%2C%20baos%2C%20null%29%3B%E8%BF%87%E7%A8%8B%E4%B8%AD%E6%8A%A5NullPointerException,%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95%EF%BC%9A%E5%9C%A8HTMLConverter.getInstance%20%28%29.convert%20%28document%2C%20baos%2C%20null%29%3B%E5%89%8D%E9%9D%A2%E5%8A%A0%E4%B8%8A%E4%BB%A3%E7%A0%81document.createNumbering%20%28%29%3B

三。解决方案

在创建table之后,设置table的列宽。

java 复制代码
    public static void setCTTblGrid(XWPFTable table){
        CTTbl ctTbl = table.getCTTbl();
        CTTblGrid tblGrid = ctTbl.getTblGrid();
        if (tblGrid == null) {
            tblGrid = ctTbl.addNewTblGrid();
            for (int i = 0; i < 2; i++) {
                CTTblGridCol ctTblGridCol = tblGrid.addNewGridCol();
                ctTblGridCol.setW(new BigInteger("1000"));
            }
        }
    }

四。总结

在docx转换html过程中,org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerException。这个报错可能很多种情况都会发生。这个可以根据具体报错信息,分析自己的docx是自己通过代码添加元素的时候,是不是有什么属性没有设置,希望能帮助大家。

复制代码
XHTMLConverter.getInstance().convert官方提供的这个方法,默认各种属性都有,一些地方没有判null逻辑。
相关推荐
迎風吹頭髮3 分钟前
UNIX下C语言编程与实践16-UNIX 磁盘空间划分:引导块、超级块、i 节点区、数据区的功能解析
java·c语言·unix
程序员小假26 分钟前
线程池执行过程中遇到异常该怎么办?
java·后端
稚辉君.MCA_P8_Java30 分钟前
DeepSeek Java 单例模式详解
java·spring boot·微服务·单例模式·kubernetes
洛_尘38 分钟前
数据结构--4:栈和队列
java·数据结构·算法
疯癫的老码农44 分钟前
【小白入门docker】创建Spring Boot Hello World应用制作Docker镜像并运行
java·spring boot·分布式·docker·微服务
Mr.Entropy1 小时前
Hibernate批量查询方法全面解析
java·后端·hibernate
绝顶少年1 小时前
Spring 框架中 RestTemplate 的使用方法
java·后端·spring
小趴菜82271 小时前
安卓人机验证View
android·java·前端
观望过往1 小时前
【Java SE 运算符】全面解析与实践指南
java
没有bug.的程序员2 小时前
分布式架构初识:为什么需要分布式
java·分布式·架构·php