不会替换 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的工具类)
原文地址:https://blog.csdn.net/u011852988
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。