当前位置: 首页 > news >正文

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依赖:

<!-- 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)

这是我当时引入的依赖:

<!-- 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这个依赖改成:

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.16.1</version>
</dependency>

即可完美解决报错。 

第二种情况

把commons-compress这个依赖改成:

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

补充一下,如果你用的apache-poi也会引发冲突,因为apache-poi它内嵌了commons-io和common-compress依赖,改成如下即可解决。

<!-- 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.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.16.1</version>
</dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.27.1</version>
</dependency>

http://www.mrgr.cn/news/95962.html

相关文章:

  • 语言模型理论基础-持续更新-思路清晰
  • Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?
  • Brainstorm绘制功能连接图(matlab)
  • vue - [Vue warn]: Duplicate keys detected: ‘0‘. This may cause an update error.
  • 第六篇:Setup:组件渲染前的初始化过程是怎样的?
  • 【Linux】交叉编译2
  • OpenCV图像拼接(5)图像拼接模块的用于创建权重图函数createWeightMap()
  • 嵌入式硬件工程师从小白到入门-PCB绘制(二)
  • 进程通信(进程池的模拟实现) read write函数复习 Linux ─── 第23课
  • 数据结构day04
  • python康复日记-request库的使用,爬虫自动化测试
  • 26考研——图_图的存储(6)
  • 26考研——图(6)
  • 2.基于多线程的TCP服务器实现
  • sql server如何提高索引命中率
  • 亚马逊云科技全面托管DeepSeek-R1模型现已上线
  • 【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权主体功能开发
  • 142. 环形链表 II——考察数学,难!
  • 26考研——图_图的应用(6)
  • Proximal Policy Optimization(PPO)算法