ofd转pdf报错:org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress【已解决】

目录

一、问题描述

第一种情况

第二种情况

二、原因分析

第一种情况

第二种情况

三、解决方案

第一种情况

第二种情况


一、问题描述

以下都是在做ofd文件转换为pdf文件时报的错误,一共碰到了2种情况,我都记录了下来:

第一种情况

报错如下:

java.lang.NoClassDefFoundError: org/apache/commons/io/function/IOIterator

at org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress(ZipUtil.java:102)

at org.ofdrw.reader.OFDReader.<init>(OFDReader.java:139)

at org.ofdrw.converter.ConvertHelper.ofd2pdf(ConvertHelper.java:64)

at org.ofdrw.converter.ConvertHelper.toPdf(ConvertHelper.java:155)

at com.example.ofd.OfdApplicationTests.convertOfdToPdf(OfdApplicationTests.java:24)

at com.example.ofd.OfdApplicationTests.contextLoads(OfdApplicationTests.java:18)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

这是我当时引入的pom依赖:

javascript 复制代码
<!-- OFD处理 -->
<dependency>
    <groupId>org.ofdrw</groupId>
    <artifactId>ofdrw-full</artifactId>
    <version>2.3.3</version>
    <exclusions>
        <exclusion>
            <artifactId>log4j-slf4j-impl</artifactId>
            <groupId>org.apache.logging.log4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

<!-- IO操作 -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

第二种情况

报错如下:

java.lang.NoSuchMethodError: org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry()Lorg/apache/commons/compress/archivers/zip/ZipArchiveEntry;

at org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress(ZipUtil.java:104)

at org.ofdrw.reader.OFDReader.<init>(OFDReader.java:139)

at org.ofdrw.converter.ConvertHelper.ofd2pdf(ConvertHelper.java:64)

at org.ofdrw.converter.ConvertHelper.toPdf(ConvertHelper.java:155)

at com.example.ofd.OfdApplicationTests.convertOfdToPdf(OfdApplicationTests.java:24)

这是我当时引入的依赖:

XML 复制代码
<!-- OFD处理 -->
<dependency>
    <groupId>org.ofdrw</groupId>
    <artifactId>ofdrw-full</artifactId>
    <version>2.3.3</version>
    <exclusions>
        <exclusion>
            <artifactId>log4j-slf4j-impl</artifactId>
            <groupId>org.apache.logging.log4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>

二、原因分析

我把两种情况都进行了分析,大家一个个看。

第一种情况

点开源码溯源,定位到该行:

经过排查,发现我只要移除commons-io这个依赖后,这个报错就消失了,也就是说我们引入的common-io这个依赖和org.ofdrw冲突了,为什么会冲突呢?就是因为org.ofdrw这个依赖也引入了common-io,但是它引入的common-io依赖的版本和我们本地引入的不一致,所以才导致的报错,所以只需要把我们本地的common-io依赖版本改成和org.ofdrw引入的common-io依赖版本一致即可。

第二种情况

点开源码溯源报错行,得到如下截图:

意思就是说zipFile.getNextEntry()提供的方法应该来自ZipArchiveEntry这个类型,而我们实际提供的类型却是ArchiveEntry,类型不一致导致报的错,也是和第一种情况一样,需要更改我们的commons-compress依赖版本和org.ofdrw一致的就行。

三、解决方案

个人不推荐把本地的common依赖剔除,因为项目当中其他地方都用到了common依赖,所以推荐修改本地引入的common依赖版本来解决ofd转换报错的问题。

第一种情况

把commons-io这个依赖改成:

XML 复制代码
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.16.1</version>
</dependency>

即可完美解决报错。

第二种情况

把commons-compress这个依赖改成:

XML 复制代码
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.27.1</version>
</dependency>
相关推荐
.格子衫.1 天前
Maven中的配置
java·maven
L.EscaRC1 天前
Spring Boot 自定义组件深度解析
java·spring boot·后端
BeingACoder1 天前
【SAA】SpringAI Alibaba学习笔记(二):提示词Prompt
java·人工智能·spring boot·笔记·prompt·saa·springai
知其然亦知其所以然1 天前
这波AI太原生了!SpringAI让PostgreSQL秒变智能数据库!
后端·spring·postgresql
有过~1 天前
多功能电脑PDF转换工具Icecream PDFv3.15 中文绿色便携版
经验分享·科技·pdf·办公软件
Q_Q5110082851 天前
python+django/flask的莱元元电商数据分析系统_电商销量预测
spring boot·python·django·flask·node.js·php
一 乐1 天前
智慧党建|党务学习|基于SprinBoot+vue的智慧党建学习平台(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·学习
观望过往1 天前
Spring Boot 集成 EMQ X 4.0 完整技术指南
java·spring boot·后端·emqx
will_we1 天前
Spring Boot4先行篇:第一篇 Spring Boot 创建 Docker 镜像
spring boot
Q_Q19632884751 天前
python+django/flask基于协同过滤算法的理财产品推荐系统
spring boot·python·django·flask·node.js·php