在使用较高的 poi 版本时,将 Word 转 HTML 或 PDF ,可能会报如下错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart
...
Caused by: java.lang.ClassNotFoundException: org.apache.poi.POIXMLDocumentPart
意思就是找不到 POIXMLDocumentPart 这个类
当前引用的 poi 版本为 4.1.1
在使用 poi 时,一定要保证版本统一
原因就是 poi 高版本的包中 org.apache.poi.POIXMLDocumentPart 类的改动很大,而相应的 PDF 包已经很久没有维护,目前是1.0.6(如果使用 poi3.0 的版本还是可以的)
解决方法:
1. 下载 org.apache.poi.xwpf.converter.core 源码
下载 sources.jar 这个
2. 下载之后,解压,修改 org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument 这个类,修改4个地方
分别是第36行、1433行、1453行、1479行
第一个是导包:
import org.apache.poi.ooxml.POIXMLDocumentPart;
剩下的将
String relationshipType = p.getPackageRelationship().getRelationshipType();
修改成
String relationshipType = p.getPackagePart().getPackage().getRelationships().getRelationship(0).getRelationshipType();
修改后的效果
3. 修改后,在项目的 src 目录下,新建 org.apache.poi.xwpf.converter.core 包,然后将修改后的 class 文件放进去即可;
或者你也可以手动替换 maven 里这个包路径 org.apache.poi.xwpf.converter.core 下的这个类