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/libreoffice2.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/fonts7.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 -fv7.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.2Q2:报错 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 -yQ4:转换后的 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 的全部流程。回顾一下关键步骤:
- 下载安装包 — 需要主程序包、SDK 包和中文语言包三个文件
- 解压并安装 — 使用
yum localinstall逐一安装各包的 RPM 文件 - 验证安装 — 通过
--help参数确认 LibreOffice 可正常运行 - 启动服务 — 以 headless 模式启动,监听指定端口供 API 调用
- 执行转换 — 使用
--convert-to pdf参数完成格式转换 - 修复乱码 — 安装中文字体并刷新缓存,确保 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/