jodconverter+openOffice word文档pdf转换

刚好遇到了,花了几个小时时间研究了下。

第一种:POI+iText PDFBox,试了下,效果不太行,比较差,而且有些中文以及格式不好处理

第二种:jacob 不支持linux,不考虑

第三种:aspose 收费,不考虑

第四种: jodconverter+openOffice/LibreOffice 就是我使用的这种,效果较好,兼容也可以

如下

maven依赖

XML 复制代码
<dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-local</artifactId>
            <version>4.4.0</version>
        </dependency>

java伪代码

java 复制代码
// 获取openoffice管理器(服务器需要安装OpenOffice的安装目录)
                    LocalOfficeManager localOfficeManager = LocalOfficeManager.builder().officeHome(ApplicationPropertiesUtils.getOfficeHome()).install().build();
                    // 判断openoffice服务是否打开
                    if(!localOfficeManager.isRunning()){
                        localOfficeManager.start();
                    }
                    //文件转化(文件/流都可以)
                    JodConverter.convert(inputStream).to(outFile).execute();
                    // 关闭localOfficeManager服务
                    OfficeUtils.stopQuietly(localOfficeManager);
复制代码
ApplicationPropertiesUtils.getOfficeHome()换成自己的openoffice路径,比如:/opt/openoffice4
复制代码
inputStream是word文档。
复制代码
outFile是转换后的pdf文件

会自动匹配

也可以指定转换文件后缀

java 复制代码
// 获取openoffice管理器(服务器需要安装OpenOffice的安装目录)
                    LocalOfficeManager localOfficeManager = LocalOfficeManager.builder().officeHome(ApplicationPropertiesUtils.getOfficeHome()).install().build();
                    // 判断openoffice服务是否打开
                    if(!localOfficeManager.isRunning()){
                        localOfficeManager.start();
                    }
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    LocalConverter converter = LocalConverter.builder().officeManager(localOfficeManager).build();
                    // 进行格式转换
                    DocumentFormat extension = DefaultDocumentFormatRegistry.getFormatByExtension(suffix);
                    converter.convert(file.getInputStream()).as(extension).to(baos).as(DefaultDocumentFormatRegistry.PDF).execute();
                    // 关闭localOfficeManager服务
                    OfficeUtils.stopQuietly(localOfficeManager);
                    InputStream inputStream=new ByteArrayInputStream(baos.toByteArray());

convert(file.getInputStream()).as(extension).to(baos).as(DefaultDocumentFormatRegistry.PDF) 文件File/流都可以,后缀也可以根据自己业务处理

支持种类比较多,一般都能满足大多数需求了,源码DefaultDocumentFormatRegistry里面有各种格式的,看是否满足自己的需求

windows和服务器linux都需要安装OpenOffice,官方下载可能有点慢,需要的看下面的链接

windows:https://pan.baidu.com/s/1_dur2uG9_hzci57CMMZvEg 提取码:hi6a

Ubuntu:百度网盘 请输入提取码 提取码:m7hy

centos:百度网盘 请输入提取码 提取码:p6u9

Ubuntu安装步骤:

必须先卸载默认安装的LibreOffice,然后用deb方式的压缩包

sudo apt-get remove --purge libreoffice*

将压缩包上传到服务器

tar -xvzf Apache_OpenOffice_4.1.15_Linux_x86-64_install-deb_zh-CN.tar.gz

cd zh-CN/DEBS/

sudo dpkg -i *.deb

cd desktop-integration/

sudo dpkg -i openoffice4.1-debian-menus_4.1.15-9813_all.deb

安装完成后在/opt/openoffice4/program/

一般不用启动,如果要启动

cd /opt/openoffice4/program/

启动可能会弹出 需要Xmanager软件来处理X11转发请求

soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &

centos还没安装,测试服务器是Ubuntu

相关推荐
一个处女座的程序猿8 小时前
LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略
pdf·markdown·zerox
Dxy12393102169 小时前
python下载pdf
数据库·python·pdf
周亚鑫9 小时前
vue3 pdf base64转成文件流打开
前端·javascript·pdf
一名技术极客10 小时前
Vue2 doc、excel、pdf、ppt、txt、图片以及视频等在线预览
pdf·powerpoint·excel·文件在线预览
Jacob程序员13 小时前
java导出word文件(手绘)
java·开发语言·word
q24985969313 小时前
前端预览word、excel、ppt
前端·word·excel
flashman91113 小时前
python在word中插入图片
python·microsoft·自动化·word
hairenjing112319 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
S. Dylan1 天前
Edge浏览器打开PDF无法显示电子签章
edge·pdf
一马平川的大草原1 天前
如何基于pdf2image实现pdf批量转换为图片
计算机视觉·pdf·文件拆分