问题现象
我的IEasyTool - 在线小工具部署在 OpenCloudOS 服务器上,使用 libreoffice-headless 将 .docx 文件转换为 PDF 时,无论是通过 Java 程序调用,还是直接在命令行执行,均报以下错误:
bash
libreoffice --headless --convert-to pdf 方案模板.docx
# Error: source file could not be loaded
Java 程序中的异常信息:
java
java.lang.RuntimeException: LibreOffice did not produce output PDF.
Output: Error: source file could not be loaded
🔍排查过程
1. 检查源文件是否正常
bash
file 方案模板.docx
# 输出:Microsoft Word 2007+
ls -lh 方案模板.docx
# 输出:-rw-r--r-- 1 root root 38K ... 方案模板.docx
结论:文件本身不是空文件,格式正确,非损坏文件。
2. 使用纯文本文件测试,排除文件格式干扰
bash
echo "test" > /tmp/test.txt
libreoffice --headless --convert-to pdf /tmp/test.txt --outdir /tmp
# 同样报错:Error: source file could not be loaded
结论:问题与 Word 文档无关,是 LibreOffice 环境或系统层面的问题。
3. 重置 LibreOffice 用户配置目录
LibreOffice 会在用户家目录生成配置文件(~/.config/libreoffice),若配置损坏,会导致加载文件失败。
bash
libreoffice --headless --convert-to pdf --user-installation /tmp/lo_config 方案模板.docx
# 依然报错
结论:配置文件损坏不是根本原因。
4. 重装 LibreOffice
bash
dnf remove libreoffice* -y
dnf install libreoffice-headless -y
重装后问题依旧。
结论:并非软件包损坏,而是版本兼容性或系统环境问题。
5. 定位根本原因
| 检查项 | 发现 |
|---|---|
| 系统发行版 | OpenCloudOS(兼容 RHEL 8/9) |
| EPEL 仓库 | dnf install epel-release 失败,手动安装报错 nothing provides redhat-release >= 9 |
| 自带版本 | 24.8.6.2(较新)可能不兼容当前系统库 |
| 安装路径 | 官方 RPM 安装后,libreoffice 命令不在 PATH 中 |
| 图形插件 | --headless 模式可能因缺少显示驱动或 X11 依赖而失败 |
核心原因:系统自带的 LibreOffice 版本(24.8)与 OpenCloudOS 的底层库存在兼容性问题,且 EPEL 无法正常使用,导致无法安装稳定版本。
✅ 解决方案(已验证有效)
采用 LibreOffice 官方独立 RPM 包 (版本 7.5.9 LTS),该版本成熟稳定,不依赖系统仓库,可绕过 EPEL 限制。
步骤一:彻底卸载旧版本
bash
dnf remove -y libreoffice* libobasis* libreoffice7.5*
rm -rf /root/.config/libreoffice /root/.cache/libreoffice
步骤二:下载并安装 LibreOffice 7.5.9
bash
cd /tmp
wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.5.9.2/rpm/x86_64/LibreOffice_7.5.9.2_Linux_x86-64_rpm.tar.gz
tar -xzf LibreOffice_7.5.9.2_Linux_x86-64_rpm.tar.gz
cd LibreOffice_7.5.9.2_Linux_x86-64_rpm/RPMS
dnf localinstall -y *.rpm
步骤三:创建软链接
官方包将可执行文件安装在 /opt/libreoffice7.5/program/soffice,需要手动创建软链接到系统 PATH:
bash
ln -sf /opt/libreoffice7.5/program/soffice /usr/local/bin/libreoffice
步骤四:验证安装
bash
libreoffice --version
# 应输出:LibreOffice 7.5.9.2
步骤五:执行转换
进入目标目录并转换:
bash
cd /root/project/backend/ocean-system/src/main/resources/static/temp
libreoffice --headless --convert-to pdf 方案模板.docx
转换成功后,当前目录会生成 方案模板.pdf。
📦 完整一键命令(复制即用)
将以下整段命令粘贴到终端,即可自动完成卸载、安装、链接和转换:
bash
# 卸载旧版并清理配置
dnf remove -y libreoffice* libobasis* libreoffice7.5* && \
rm -rf /root/.config/libreoffice /root/.cache/libreoffice && \
# 下载安装包
cd /tmp && \
wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.5.9.2/rpm/x86_64/LibreOffice_7.5.9.2_Linux_x86-64_rpm.tar.gz && \
# 解压并安装
tar -xzf LibreOffice_7.5.9.2_Linux_x86-64_rpm.tar.gz && \
cd LibreOffice_7.5.9.2_Linux_x86-64_rpm/RPMS && \
dnf localinstall -y *.rpm && \
# 创建软链接
ln -sf /opt/libreoffice7.5/program/soffice /usr/local/bin/libreoffice && \
# 进入目标目录并转换
cd /root/project/backend/ocean-system/src/main/resources/static/temp && \
libreoffice --headless --convert-to pdf 方案模板.docx || \
SAL_USE_VCLPLUGIN=svp libreoffice --headless --convert-to pdf --user-installation /tmp/lo_new 方案模板.docx
📊 踩坑总结
| 问题点 | 解决方案 |
|---|---|
| EPEL 仓库安装失败 | 不使用 EPEL,直接用官方 RPM |
| 系统自带版本(24.8)不稳定 | 降级到 7.5.9 LTS |
libreoffice 命令找不到 |
手动创建软链接到 /usr/local/bin |
| 用户配置文件损坏 | 清理 ~/.config/libreoffice 或使用 --user-installation |
| 无头模式图形插件冲突 | 使用 SAL_USE_VCLPLUGIN=svp 强制无头 |
💡 核心经验
在非标准 RHEL 发行版(如 OpenCloudOS)上部署 LibreOffice 时,优先使用官方提供的独立 RPM 包,避免依赖系统仓库或 EPEL,以规避兼容性问题。
📎 附录:常用命令速查
| 操作 | 命令 |
|---|---|
| 查看版本 | libreoffice --version |
| 查看文件类型 | file 方案模板.docx |
| 清理配置 | rm -rf ~/.config/libreoffice |
| 强制无头模式 | SAL_USE_VCLPLUGIN=svp libreoffice ... |
| 使用临时配置 | --user-installation /tmp/lo_new |
| 转换并指定输出目录 | --outdir /指定路径 |