用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


    转自:https://segmentfault.com/a/1190000015129654

    感谢您的阅读,您的支持是我写博客动力。