目录

CentOS 7 安装 LibreOffice 实现 Word、PPT、Excel 转 PDF 完整教程

前言

在实际的服务器运维和后端开发场景中,我们经常会遇到这样的需求:用户上传了 Word、PPT 或 Excel 文件,系统需要自动将其转换为 PDF 格式,以便在线预览或归档。在 Linux 环境下,LibreOffice 提供了一个非常成熟的 headless(无头)模式,可以在没有图形界面的服务器上完成这一任务。

本文将以 CentOS 7 为例,手把手带你完成 LibreOffice 的安装、配置以及文档转 PDF 的全过程,同时也会分享一些笔者在实际部署中踩过的坑,比如中文乱码、依赖缺失等问题的解决办法。

适用场景: 后端服务自动化文档转换、在线文档预览系统、企业内部文件管理平台等。


环境准备

在动手之前,请确认你的服务器满足以下条件:

项目 要求
操作系统 CentOS 7 x86_64
权限 root 用户或具备 sudo 权限
网络 能够访问外网下载安装包(或提前离线下载)
磁盘空间 建议预留 1 GB 以上

如果服务器上之前安装过旧版本的 LibreOffice,建议先执行卸载命令,避免版本冲突:

yum remove libreoffice-* -y

第一步:下载 LibreOffice 安装包

LibreOffice 在 Linux 上的安装需要三个 RPM 包:主程序包SDK 包以及中文语言包。你可以直接在服务器上通过 wget 下载,也可以先在本地下载后上传到服务器。

方式一:服务器直接下载

# 主程序包
wget https://mirrors.ustc.edu.cn/tdf/libreoffice/stable/6.2.8/rpm/x86_64/LibreOffice_6.2.8_Linux_x86-64_rpm.tar.gz

# SDK 包
wget https://mirrors.ustc.edu.cn/tdf/libreoffice/stable/6.2.8/rpm/x86_64/LibreOffice_6.2.8_Linux_x86-64_rpm_sdk.tar.gz

# 中文语言包
wget https://mirrors.ustc.edu.cn/tdf/libreoffice/stable/6.2.8/rpm/x86_64/LibreOffice_6.2.8_Linux_x86-64_rpm_langpack_zh-CN.tar.gz

方式二:手动下载后上传

如果服务器网络不稳定,可以在本地浏览器中访问镜像站点,下载上述三个文件后通过 scp 或 FTP 工具上传至服务器:

https://mirrors.ustc.edu.cn/tdf/libreoffice/stable/6.2.8/rpm/x86_64/

提示: 如果上面的镜像链接失效,可以前往 LibreOffice 官方下载页 或其他国内镜像站获取对应版本。


第二步:解压并安装 RPM 包

2.1 解压安装包

将三个 .tar.gz 文件逐一解压。这里以主程序包为例,其他两个包操作方式相同:

# 创建一个专门的目录存放解压文件
mkdir -p /usr/local/libreoffice

# 解压主程序包
tar -xvf LibreOffice_6.2.8_Linux_x86-64_rpm.tar.gz -C /usr/local/libreoffice

# 解压 SDK 包
tar -xvf LibreOffice_6.2.8_Linux_x86-64_rpm_sdk.tar.gz -C /usr/local/libreoffice

# 解压中文语言包
tar -xvf LibreOffice_6.2.8_Linux_x86-64_rpm_langpack_zh-CN.tar.gz -C /usr/local/libreoffice

2.2 安装 RPM 文件

每个解压后的目录下都会有一个 RPMS 文件夹,进入该文件夹后使用 yum localinstall 安装所有 .rpm 文件。

安装主程序:

cd /usr/local/libreoffice/LibreOffice_6.2.8.2_Linux_x86-64_rpm/RPMS/
yum localinstall *.rpm -y

安装 SDK:

cd /usr/local/libreoffice/LibreOffice_6.2.8.2_Linux_x86-64_rpm_sdk/RPMS/
yum localinstall *.rpm -y

安装中文语言包:

cd /usr/local/libreoffice/LibreOffice_6.2.8.2_Linux_x86-64_rpm_langpack_zh-CN/RPMS/
yum localinstall *.rpm -y

说明: 使用 yum localinstall 而不是 rpm -ivh 的好处在于,yum 会自动处理依赖关系,减少安装失败的概率。


第三步:验证安装结果

安装完成后,先通过 whereis 确认 LibreOffice 的可执行文件是否已经就位:

whereis libreoffice6.2

正常情况下,输出类似:

libreoffice6.2: /usr/bin/libreoffice6.2

接着运行帮助命令来验证程序能否正常启动:

libreoffice6.2 --help

如果终端输出了 LibreOffice 的版本信息和参数说明,就表示安装成功了。输出内容大致如下:

LibreOffice 6.2.8.2 f82ddfca21ebc1e222a662a32b25c0c9d20169ee

Usage: soffice [argument...]
       argument - switches, switch parameters and document URIs (filenames).
...

注意: 如果提示 command not found,请检查 /usr/bin/libreoffice6.2 是否存在,或尝试使用完整路径 /opt/libreoffice6.2/program/soffice 来调用。


第四步:启动 headless 服务

在某些业务场景下(比如通过 Java 或 Python 调用 UNO API),你需要让 LibreOffice 以后台服务的方式运行,监听一个指定端口:

libreoffice6.2 --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &

安全建议: host 参数建议设置为 127.0.0.1 而非 0.0.0.0,避免将服务暴露到公网。如果确实需要远程访问,请通过防火墙规则做好访问控制。

启动后,使用以下命令确认服务是否在运行:

netstat -tlnp | grep 8100

或者用 ss 命令:

ss -tlnp | grep 8100

如果看到 8100 端口处于 LISTEN 状态,就说明服务已经正常启动。


第五步:设置命令别名(可选)

每次输入 libreoffice6.2 比较繁琐,可以设置一个简短的别名:

# 临时生效(当前会话)
alias libreoffice='libreoffice6.2'

# 永久生效(写入配置文件)
echo "alias libreoffice='libreoffice6.2'" >> ~/.bashrc
source ~/.bashrc

设置完成后,直接输入 libreoffice 即可调用,无需再写完整版本号。


第六步:执行文档转 PDF

这是整篇教程的核心部分。LibreOffice 的 --convert-to 参数支持将 Word(.doc.docx)、PPT(.ppt.pptx)、Excel(.xls.xlsx)等格式批量转换为 PDF。

基本转换命令

libreoffice6.2 --headless --invisible --convert-to pdf 待转换的文件 --outdir 输出目录

实际示例

假设你有一个 Word 文件 /data/docs/report.docx,想将其转换为 PDF 并保存到 /data/pdf/ 目录下:

libreoffice6.2 --headless --invisible --convert-to pdf /data/docs/report.docx --outdir /data/pdf/

执行成功后,终端会输出类似信息:

convert /data/docs/report.docx -> /data/pdf/report.pdf using filter : writer_pdf_Export

批量转换

如果需要一次性转换某个目录下的所有 Word 文件:

libreoffice6.2 --headless --invisible --convert-to pdf /data/docs/*.docx --outdir /data/pdf/

转换 PPT 和 Excel

命令格式完全一样,LibreOffice 会自动识别文件类型并选择合适的过滤器:

# 转换 PPT
libreoffice6.2 --headless --invisible --convert-to pdf /data/docs/slides.pptx --outdir /data/pdf/

# 转换 Excel
libreoffice6.2 --headless --invisible --convert-to pdf /data/docs/data.xlsx --outdir /data/pdf/

第七步:修复中文乱码问题

如果你的 CentOS 7 系统是最小化安装的,很可能没有预装中文字体。这时转换出来的 PDF 中所有中文字符都会显示为方框或乱码。解决方法很简单——手动安装中文字体。

7.1 查看系统字体目录

cat /etc/fonts/fonts.conf | grep "<dir>"

一般会看到以下几个字体目录:

/usr/share/fonts
/usr/share/X11/fonts/Type1
/usr/share/X11/fonts/TTF
/usr/local/share/fonts

7.2 上传并安装中文字体

你需要准备常用的中文字体文件,比如 simsun.ttc(宋体)、simhei.ttf(黑体)、msyh.ttf(微软雅黑)等。这些字体文件可以从 Windows 系统的 C:\Windows\Fonts\ 目录中获取。

将字体文件上传到服务器后,执行以下操作:

# 复制字体文件到系统字体目录
cp simsun.ttc simhei.ttf msyh.ttf /usr/share/fonts/

# 设置正确的文件权限
chmod 644 /usr/share/fonts/simsun.ttc
chmod 644 /usr/share/fonts/simhei.ttf
chmod 644 /usr/share/fonts/msyh.ttf

# 刷新字体缓存
fc-cache -fv

7.3 验证字体安装

fc-list :lang=zh

如果输出中能看到刚才安装的字体名称,说明中文字体已经被系统识别。此时重新执行转换命令,PDF 中的中文内容就能正确显示了。


第八步:转换效果验证

安装字体后,我们再做一次完整的转换测试:

libreoffice6.2 --headless --invisible --convert-to pdf /data/docs/report.docx --outdir /data/pdf/

预期输出:

convert /data/docs/report.docx -> /data/pdf/report.pdf using filter : writer_pdf_Export

将生成的 PDF 文件下载到本地用浏览器或 PDF 阅读器打开,确认以下几点:

  • 中文内容显示正常,没有乱码或方框
  • 文档排版和原文件基本一致
  • 图片、表格等元素正常渲染

如果一切正常,恭喜你,整个部署流程就完成了!


常见问题

Q1:执行命令时提示 command not found 怎么办?

这通常是因为 LibreOffice 的可执行文件没有被加入系统 PATH。你可以尝试以下解决方法:

# 确认安装路径
find / -name "soffice" 2>/dev/null

# 创建软链接
ln -s /opt/libreoffice6.2/program/soffice /usr/local/bin/libreoffice6.2

Q2:报错 libcairo.so.2: cannot open shared object file

这是缺少 cairo 图形库导致的,安装相关依赖即可:

yum install cairo cups-libs libSM -y

如果还有其他类似的 .so 文件缺失,可以用 yum provides 查找对应的包:

yum provides "*/libcairo.so.2"

Q3:报错 no version information available (required by libmergedlo.so)

这个警告信息来源于系统自带的 libdbus 版本与 LibreOffice 内置版本不完全匹配。大多数情况下,这只是一个警告,不影响实际转换功能。如果确实出现了转换失败,可以尝试更新 dbus 库:

yum update dbus-libs -y

Q4:转换后的 PDF 排版与原文件差异较大

这是由于服务器上缺少原文件使用的字体。LibreOffice 在找不到对应字体时会使用默认字体进行替换,导致排版偏移。解决办法是把原文件中用到的字体全部安装到服务器上。

Q5:并发转换时出现文件锁定或转换失败

LibreOffice 在单进程模式下不支持并发操作。如果你的业务需要同时处理多个转换任务,建议使用以下方案:

  • 为每个转换任务指定独立的用户配置目录,避免文件锁冲突:
libreoffice6.2 --headless --invisible \
  -env:UserInstallation=file:///tmp/libreoffice_user_1 \
  --convert-to pdf /data/docs/file1.docx --outdir /data/pdf/
  • 或者使用消息队列将转换请求串行化处理

Q6:如何在后台持续运行 LibreOffice 服务?

可以使用 nohup 或配合 systemd 管理:

# 使用 nohup
nohup libreoffice6.2 --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &

# 或者编写 systemd service 文件实现开机自启

总结

本文从零开始,完整演示了在 CentOS 7 上安装 LibreOffice 并实现 Word、PPT、Excel 转 PDF 的全部流程。回顾一下关键步骤:

  1. 下载安装包 — 需要主程序包、SDK 包和中文语言包三个文件
  2. 解压并安装 — 使用 yum localinstall 逐一安装各包的 RPM 文件
  3. 验证安装 — 通过 --help 参数确认 LibreOffice 可正常运行
  4. 启动服务 — 以 headless 模式启动,监听指定端口供 API 调用
  5. 执行转换 — 使用 --convert-to pdf 参数完成格式转换
  6. 修复乱码 — 安装中文字体并刷新缓存,确保 PDF 中文正常显示

LibreOffice 的 headless 模式非常适合在服务器端进行文档格式转换,配合 Java、Python 或 Go 等语言的调用,可以很方便地集成到你的业务系统中。虽然在字体和排版方面可能还需要一些微调,但整体来说是 Linux 环境下最成熟、最可靠的文档转换方案之一。


如果大家在 CentOS 7 上安装 LibreOffice 或者文档转 PDF 的过程中还遇到了什么问题,欢迎在评论区留言交流,我看到后会尽量帮大家解答~~~

版权声明

未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!

本文原文链接: https://fiveyoboy.com/articles/centos7-install-libreoffice-convert-word-ppt-excel-to-pdf/

备用原文链接: https://blog.fiveyoboy.com/articles/centos7-install-libreoffice-convert-word-ppt-excel-to-pdf/