ClassNotFoundException org.apache.poi.POIXMLDocumentPart 错误解决

5,798 阅读1分钟

在使用较高的 poi 版本时,将 WordHTMLPDF ,可能会报如下错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart
...
Caused by: java.lang.ClassNotFoundException: org.apache.poi.POIXMLDocumentPart

image.png

意思就是找不到 POIXMLDocumentPart 这个类

当前引用的 poi 版本为 4.1.1

image.png

在使用 poi 时,一定要保证版本统一

原因就是 poi 高版本的包中 org.apache.poi.POIXMLDocumentPart 类的改动很大,而相应的 PDF 包已经很久没有维护,目前是1.0.6(如果使用 poi3.0 的版本还是可以的)

解决方法:

1. 下载 org.apache.poi.xwpf.converter.core 源码

下载 sources.jar 这个 image.png

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();

修改后的效果

image.png

image.png

image.png

image.png

3. 修改后,在项目的 src 目录下,新建 org.apache.poi.xwpf.converter.core 包,然后将修改后的 class 文件放进去即可;

或者你也可以手动替换 maven 里这个包路径 org.apache.poi.xwpf.converter.core 下的这个类