刚好遇到了,花了几个小时时间研究了下。
第一种: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