Exception java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart

2年前 (2022) 程序员胖胖胖虎阿
322 0 0

不会替换 jar 包可以参考这篇文章 不重新打包,只修改 jar 包中的某个文件、某个类

1. 功能:Word 转 PDF

2. 使用包的版本如下

POI    PDF
<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>

<dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.xdocreport.itext.extension</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>org.apache.poi.xwpf.converter.core</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
            <version>1.0.6</version>
        </dependency>

3. 问题:

关键出错 jar 包:org.apache.poi.xwpf.converter.core 

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart
    at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.getFontsDocument(XWPFStylesDocument.java:1477)
    at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.<init>(XWPFStylesDocument.java:190)
    at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.<init>(XWPFStylesDocument.java:184)
    at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.createStylesDocument(XWPFDocumentVisitor.java:166)
    at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.<init>(XWPFDocumentVisitor.java:159)
    at org.apache.poi.xwpf.converter.pdf.internal.PdfMapper.<init>(PdfMapper.java:149)
    at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:55)
    at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:38)
    at org.apache.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:45)
    at com.test.WordPdfUtils.wordConverterToPdf(WordPdfUtils.java:113)
    at com.test.WordPdfUtils.wordConverterToPdf(WordPdfUtils.java:66)
    at com.test.WordPdfUtils.main(WordPdfUtils.java:47)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.POIXMLDocumentPart
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 12 more

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

4. 解决方案

(2-1) 下载源码,org.apache.poi.xwpf.converter.core 源码包下载链接

(2-2) 修改  org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument 类中调用 POIXMLDocumentPart 的部分

一共四行代码,第一行是引包,其他三行是一样的,详细见下图

5. 打包方法参考

(1)修改后自己正常打包就可以,手动替换一下本地 maven 目录下的 org.apache.poi.xwpf.converter.core 包

(2)或者可以在自己的项目中,单独创建这个目录和修改后的类

6. 资源

修改后的类以及Word转PDF工具类

(修改后的 org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument

以及Word转PDF的工具类)
 

相关文章

暂无评论

暂无评论...