用LibreOffice将Office文档转换PDF
本例使用 LibreOffice-6.0.4
、jodconverter-4.2.0
、spring-boot-1.5.9.RELEASE
。
在CentOS7 + openJDK8
和 Windows7 + jdk1.8
环境下测试通过。
LibreOffice转换命令
# 源文件放在 e:\tmp\123.docx 或者 /tmp/123.docx
# windows
soffice.exe --headless --invisible --convert-to pdf e:\tmp\123.docx --outdir e:\tmp
# linux
/usr/bin/libreoffice6.0 --headless --invisible --convert-to pdf /tmp/123.docx --outdir /tmp
jodconverter
封装了一组转换命令,通过java
调用LibreOffice
相关服务。
pom依赖
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-core</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-local</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.libreoffice</groupId>
<artifactId>ridl</artifactId>
<version>5.4.2</version>
</dependency>
注意: 在这里说明特别一下,jodconverter
自4.2开始,对LibreOffice
相关功能从jodconverter-core
中分离出来,封装到为jodconverter-local
,另外新增了jodconverter-online
,支持LibreOffice online server
的远程调用。
配置 application.properties
jodconverter.local.enabled=true
# 设置LibreOffice主目录
jodconverter.local.office-home=${pom.office.home}
# 开启多个LibreOffice进程,每个端口对应一个进程
jodconverter.local.portNumbers=8100,8101,8102
# LibreOffice进程重启前的最大进程数
jodconverter.local.maxTasksPerProcess=100
使用Maven
的多环境配置
<profiles>
<profile>
<!-- windows环境 -->
<id>win</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<pom.office.home>C:/Program Files/LibreOffice</pom.office.home>
</properties>
</profile>
<profile>
<!-- linux环境 -->
<id>linux</id>
<properties>
<pom.office.home>/opt/libreoffice6.0</pom.office.home>
</properties>
</profile>
</profiles>
调用方法
import org.jodconverter.DocumentConverter;
@Resource
private DocumentConverter documentConverter;
// 具体转换方法,参数是java.io.File
documentConverter.convert(sourceFile).to(targetFile).execute();
-
convert方法
接受参数java.io.File
或java.io.InputStream
-
to方法
接受参数java.io.File
或java.io.OutputStream
在线预览
使用开源项目 https://github.com/mozilla/pdf.js
下载最新的release包(pdfjs-x.y.z-dist.zip)
pdfjs\web\viewer.html
传入参数file
(示例:http://localhost:8080/pdfjs/web/viewer.html?file=xxxxxxx.pdf
)
CentOS7安装LibreOffice
官网
https://zh-cn.libreoffice.org/
科大镜像
http://mirrors.ustc.edu.cn/td...
中文语言包
http://mirrors.ustc.edu.cn/td...
下载安装包
wget -P /tmp/office http://mirrors.ustc.edu.cn/tdf/libreoffice/stable/6.0.4/rpm/x86_64/LibreOffice_6.0.4_Linux_x86-64_rpm.tar.gz
wget -P /tmp/office http://mirrors.ustc.edu.cn/tdf/libreoffice/stable/6.0.4/rpm/x86_64/LibreOffice_6.0.4_Linux_x86-64_rpm_langpack_zh-CN.tar.gz
解压缩
tar zxvf /tmp/office/LibreOffice_6.0.4_Linux_x86-64_rpm.tar.gz -C /tmp/office
tar zxvf /tmp/office/LibreOffice_6.0.4_Linux_x86-64_rpm_langpack_zh-CN.tar.gz -C /tmp/office
检查安装包
ll /tmp/office/LibreOffice_6.0.4.2_Linux_x86-64_rpm/RPMS/*.rpm
ll /tmp/office/LibreOffice_6.0.4.2_Linux_x86-64_rpm_langpack_zh-CN/RPMS/*.rpm
用yum安装,不要执行install
yum install /tmp/office/LibreOffice_6.0.4.2_Linux_x86-64_rpm/RPMS/*.rpm
yum install /tmp/office/LibreOffice_6.0.4.2_Linux_x86-64_rpm_langpack_zh-CN/RPMS/*.rpm
安装libcairo.so.2依赖库
yum install ibus
查找服务目录
安装路径:/opt/libreoffice6.0
快捷方式:/usr/bin/libreoffice6.0
启动服务
/usr/bin/libreoffice6.0 --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard
CentOS7安装字体库
在CentOS7服务器上,利用LibreOffice将word等格式转换为PDF,发现不支持汉字。需要安装字体库。
安装fontconfig
yum -y install fontconfig
安装完成后,/usr/share目录就可以看到fonts和fontconfig两个目录。
安装ttmkfdir
yum -y install ttmkfdir
检查已有字体库
fc-list
复制字体
#新建文件夹
mkdir /usr/share/fonts/chinese
把Windows系统的字体C:\Windows\Fonts
复制进去。
- simsun.ttc 宋体
- simhei.ttf 黑体
- msyh.ttf 微软雅黑
- msyhbd.ttf 微软雅黑
# 修改字体权限
chmod -R 644 /usr/share/fonts/chinese
汇总生成fonts.scale文件
ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
修改字体配置文件
vim /etc/fonts/fonts.conf
修改内容
<fontconfig>
....
<dir>....
<dir>/usr/share/fonts/chinese</dir>
....
</fontconfig>
更新字体缓存
fc-cache -fv
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。