文章目录

  • 一、基础对比
    • 1.版本对比
    • 2.异常现象
  • 二、分析定位
    • 2.1. 找异常输出处
    • 2.2. 找异常源头
    • 2.3. api源头
  • 三、实现流程
    • 3.1. 思路
    • 3.2. 新建包重写类
    • 3.3. 完整类
一、基础对比
1.版本对比
03版本office 07版本及高版本office
.doc .docx
.xls .xlsx
.ppt .pptx
2.异常现象

搭建好 SpringBoot + OpenOffice + jodconverter2.2.1 后,转换07版本及高版本(.docx/.xlsx/.pptx)时,转换 docx、xlsx、pptx 时报了以下错误:

SocketOpenOfficeConnection : connected
java.lang.IllegalArgumentException: inputFormat is null at com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.ensureNotNull(AbstractOpenOfficeDocumentConverter.java:113)

二、分析定位
2.1. 找异常输出处

找到输出异常的代码处

在AbstractOpenOfficeDocumentConverter 抽象类中的79行代码的convert方法处输出的异常

2.2. 找异常源头

为什么会输出这个异常信息?


从上图中可以看出由于inputFormat参数为null,导致inputFormat is null 校验异常,进一步分析,既然是由于参数为null触发的这个异常,那这个参数到底从获取的呢?对吧

从上图中可以看出,这个类的第95行获取的对吧,那就好办了,进入源码,一探究竟。

从图中可以看到BasicDocumentFormatRegistry抽象类的getFormatByFileExtension方法,功能就是提供文件扩展名



从上图可以看出,支持文件格式有21种,但是,咱们传入的文件类型xlsx、docx、pptx这3种格式,均不在这21种格式之内,因此,导致返回的sourceFormat参数是null

2.3. api源头

小伙伴们现在跟着我考虑以下二个问题哈?

问题1:
是由于以前默认提供了21种文件格式,不包括07版本及高版本的文件格式,但是,支持转换xlsx、docx、pptx文件格式的文件?

问题2:只支持默认的21种文件格式的文件转换呢?

下面小伙伴们跟着我一起来探究一下真相到底如何?
咱们先假设:预期结果问题1

那咱们又该如何解决呢?找源头

从图中可以看出下面获取文件后缀名和DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();有关系,是最开始的地方,对吧!进入源码一探究竟

从山图中可以看出DefaultDocumentFormatRegistry定义了默认支持的后缀名对吧。不仅如此,还extends BasicDocumentFormatRegistry,进入BasicDocumentFormatRegistry

发现又回到了刚才获取文件后缀名的地方,对吧!

这个校验是由于传入的文件类型,不在默认21种文件格式之内,才会被触发对吧?

咱们需要想个办法,让他跳过这个校验,既然默认提供的21种格式,又不能新增文件格式,能不能让咱们传入的格式在默认提供的21种格式之内呢?可以的

当传入的参数为xlsx、docx、pptx文件格式时,返回的对应的文件格式为xls、doc、ppt格式后缀名,就可实现了对吧!

三、实现流程
3.1. 思路

既然DefaultDocumentFormatRegistry继承BasicDocumentFormatRegistry类,那咱们就重写BasicDocumentFormatRegistry类,在判断后缀名之前对传入的文件后缀名做处理“返回的对应的文件格式为xls、doc、ppt格式后缀名”

3.2. 新建包重写类

新建com.artofsolving.jodconverter重写BasicDocumentFormatRegistry

3.3. 完整类
package com.artofsolving.jodconverter;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;/*** @description: 重写 BasicDocumentFormatRegistry 文档格式* @Author: gblfy* @Data: 2021-10-27**/
public class BasicDocumentFormatRegistry implements DocumentFormatRegistry {private List/* <DocumentFormat> */ documentFormats = new ArrayList();public void addDocumentFormat(DocumentFormat documentFormat) {documentFormats.add(documentFormat);}protected List/* <DocumentFormat> */ getDocumentFormats() {return documentFormats;}/*** @param extension the file extension* @return the DocumentFormat for this extension, or null if the extension* is not mapped*/@Overridepublic DocumentFormat getFormatByFileExtension(String extension) {if (extension == null) {return null;}//将文件名后缀统一转化if (extension.indexOf("doc") >= 0) {extension = "doc";}if (extension.indexOf("ppt") >= 0) {extension = "ppt";}if (extension.indexOf("xls") >= 0) {extension = "xls";}String lowerExtension = extension.toLowerCase();for (Iterator it = documentFormats.iterator(); it.hasNext(); ) {DocumentFormat format = (DocumentFormat) it.next();if (format.getFileExtension().equals(lowerExtension)) {return format;}}return null;}@Overridepublic DocumentFormat getFormatByMimeType(String mimeType) {for (Iterator it = documentFormats.iterator(); it.hasNext(); ) {DocumentFormat format = (DocumentFormat) it.next();if (format.getMimeType().equals(mimeType)) {return format;}}return null;}
}

解决jodconverter 2.2.1 版本不支持docx、xlsx、pptx 转换成PDF格式异常相关推荐

  1. 解决jodconverter 2.2.1版本不支持docx、xlsx、pptx转换成PDF格式异常

    Java使用openoffice将office系列文档转换为PDF 搭建好 OpenOffice + jodconverter 后,转换doc(97-2003)时正常,但是转换 docx 时报了以下错 ...

  2. Microsoft office 2007以上版本,EXCEL 将xlsx文件转换成pdf文件出现:尚未安装打印机。转换失败...

    原因:未添加打印机. 查看:查看打印机程序是否启动 解决办法: 1.安装打印机驱动程序:控制面板→打印机和传真→添加打印机→下一步→选择"连接到此计算机的本地打印机"→取消勾选&q ...

  3. Epub格式怎么转换成PDF格式?这个方法轻松解决

    如何将epub格式的文件转换成PDF格式呢?Epub格式文件是一种电子书格式,是电子出版物的缩写,虽然它也是电子书格式,但大家对它的使用率并不高,一般情况下电脑中都没有装有打开epub文件的软件,在浏 ...

  4. 怎么把ppt文件转换成pdf?解决方法有这几种

    想必对于PPT和PDF文件都比较熟悉了呗!那怎么解决将PPT格式转成PDF格式呢? 其实PPT转换成PDF格式的话还是很简单的,部分软件通过另存为命令就可以帮你轻松搞定了,可是要想转回去就没那么简单了 ...

  5. echart转换成pdf js_【jsPDF】jsPDF插件实现将html页面转换成PDF,并下载,支持分页...

    1.目的:在前段是 jQuery库 或者 VUE库 或者两者混合库,将html 页面和数据 转换成PDF格式并下载,支持分页 1.项目背景: 对客户报修记录进行分类统计,并生成各种饼图.柱状图.线性图 ...

  6. 怎么解决pdf转换成cad格式呢?

    在我们工作中,难免需要将PDF文件转换成CAD图纸,这毕竟两种完全不同格式的文件要转换起来,不了解操作方法感觉挺难的.那么如何快速解决pdf转换成cad格式呢? PDF的特点是在任何平台都等同于原稿, ...

  7. jodconverter 2.2.2 +openoffice4.0 doc转换成pdf

    一.环境 linux下安装openoffice 1.首先先下载好需要的rpm包:Apache_OpenOffice_4.0.0_Linux_x86-64_install-rpm_zh-CN.tar.g ...

  8. html长图转换成pdf,支持把各类文档转换成 HTML5(SVG)接口、长图片、PDF 。word转pdf、word转html5、pdf转网页html5、pdf转图片的接口...

    详情请到九云图官网了解一下.https://server.9yuntu.com/yuntu/resource/website/api.html 把 OFFICE / PDF / CAD 等文档转换成 ...

  9. xhtmlrenderer 将html转换成pdf,完美css,带图片,手动分页,解决内容断开的问题

    xhtmlrenderer 将html转换成pdf,完美css,带图片,手动分页,解决内容断开的问题 参考文章: (1)xhtmlrenderer 将html转换成pdf,完美css,带图片,手动分页 ...

最新文章

  1. “人机大战”捧红人工智能 新时代的HPC玩家需要什么能力?
  2. 2.3 最佳创新先锋:e代驾副总裁兼CTO于杨
  3. [转]在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录...
  4. php 文件 计数,文件计数问题
  5. 理解C#中的委托与事件
  6. 使用 CodeIgniter 框架快速开发 PHP 应用(一)
  7. 在手机上写python_牛逼啊!一个随时随地写Python代码的神器
  8. CentOS配置Nginx官方的Yum源 及yum安装php
  9. java我的世界显示合成表_我的世界:若从你的背包移除“合成表”,回到5年前,最原始状态...
  10. html滚动字幕制作教程,dreamweaver教程:怎么制作网页滚动字幕
  11. python中的系统模块_python中与系统发育相关的模块
  12. 西门子g120变频器接线图_西门子变频器G120应用技术手册
  13. MyBatis官网下载步骤
  14. ARM_Linux开发之TFTP应用
  15. 2019新版前端与移动开发学习路线图(视频+工具+书籍+资源)
  16. 写给那些进步缓慢却全然不知的IT人
  17. 01 TVM环境编译
  18. iframe相关,iframe样式
  19. Docker基础: Linux内核命名空间之(1) mnt namespace
  20. 对sizeof的一点点理解

热门文章

  1. 2020诺奖预测出炉!“引文桂冠”奖今日公布,华人学者戴宏杰入选
  2. 问答丨按量子力学来说,一个人撞墙,有多大概率能穿过去?
  3. AI岗位秋招纪实:算法原理扎实才是王道,而不是调参
  4. 一文重新认识联邦学习
  5. ef mysql 外键 一对一_MySQL 外键 一对一 一对多 多对多 复制
  6. 【转载保存】Selenium WebDriver API常用方法
  7. Unity3d访问数据库
  8. 卡顿人生,如何拯救?
  9. Mysql5.7使用DTS增量同步数据到MaxCompute
  10. DLA SQL技巧:行、列转换和JSON数据列展开