LibreOffice 是一款免费、开源的跨平台办公套件,对标微软的 Microsoft Office,可用于创建、编辑和管理文档、表格、演示文稿等各类办公文件,且完全免费无版权费用,适合个人、企业、教育机构等各类用户使用。
安装字体包之后,转换的PDF包还是存在乱码?
安装了 libreoffice-lang-zh_cn 语言包后,LibreOffice 转换 PDF 仍出现中文乱码,核心原因不是语言包没生效,而是 Alpine 系统默认缺少中文字体—— 语言包仅负责设置界面 / 文档的语言规则,而中文字体才是渲染中文文字的核心(没有字体,即使语言包装了,PDF 也会因 “无可用中文字体” 显示乱码 / 方块)。
处理方法如下:
1)安装 LibreOffice 和中文语言包
LibreOffice 官网:https://www.libreoffice.org/
首先,在系统中安装 LibreOffice 核心包和中文语言支持包。
# 安装libreoffice
apk add libreoffice
# 安装中文语言包
apk add libreoffice-lang-zh_cn
# 验证
libreoffice --version

2)导入中文字体
仅安装语言包还不够,你需要在系统中添加可用的中文字体。首先创建一个用于存放中文字体的目录。
mkdir -p /usr/share/fonts/chinese
接下来,将 Windows 系统(路径 C:\Windows\Fonts)中的黑体(SimHei)和宋体(SimSun)字体文件,复制到容器或系统的 /usr/share/fonts/chinese 目录中。

复制完成后,修改字体目录的权限并验证文件是否已存在。
chmod -R 755 /usr/share/fonts/chinese && ls -lh /usr/share/fonts/chinese

3)重建字体缓存并验证
导入字体后,需要更新系统的字体缓存,使 LibreOffice 能够识别这些新字体。
mkfontscale && mkfontdir && fc-cache && fc-list :lang=zh

如果看到包含 “SimSun”(宋体)和 “SimHei”(黑体)的输出,说明中文字体已成功安装并被系统识别。
4)执行 Word 到 PDF 的转换命令
现在可以尝试使用命令行进行转换了。
libreoffice --headless --convert-to pdf /tmp/your-document.docx
# 或者使用更详细的命令
libreoffice --headless --norestore --convert-to pdf:writer_pdf_Export /tmp/your-document.docx --outdir ./
5)检查结果
打开生成的 PDF 文件,如果一切配置正确,中文乱码问题应该已经解决。
核心要点:如果你只安装了 libreoffice 就直接将 Word 转换为 PDF 文件,打开 PDF 文件大概率会乱码。必须安装中文语言包和配置中文字体,两者缺一不可。
6)Dockerfile 参考示例
如果你在使用 Docker 容器,可以参考以下 Dockerfile 片段。这个示例基于 openjdk:17-jdk-alpine 镜像,并完成了 LibreOffice、中文语言包以及中文字体的安装与配置,这对需要在容器化环境中进行文档转换的运维工作很有帮助。

FROM r. .library/openjdk:17-jdk-alpine-fonts-zh as runner
WORKDIR /data
VOLUME /tmp
RUN echo "Asia/Shanghai" > /etc/timezone
RUN apk add libreoffice
RUN apk add libreoffice-lang-zh_cn
RUN chmod -R 755 /usr/share/fonts/chinese && ls -lh /usr/share/fonts/chinese
RUN mkfontscale && mkfontdir && fc-cache && fc-list :lang=zh
EXPOSE 8080
ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:InitialRAMPercentage=40.0 -XX:MinRAMPercentage=20.0 -XX:MaxRAMPercentage=80.0 -XX:UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:ReservedCodeCacheSize=240m -Djava.security.egd=file:/dev/urandom"
ENV APP_OPTS=-Dproject.logs.dir=./logs -Dversion.tag=""
ENTRYPOINT ["tini", "--"]
CMD ["bash", "-c", "java -server $JAVA_OPTS $APP_OPTS -jar /data/app.jar"]
COPY yudao-module-tpm/yudao-module-tpm-biz/target/*.jar /data/app.jar"
7)参考链接
如果你想深入了解或排查其他可能的问题,可以参考以下文章:
希望这份针对 Alpine 系统的解决方案能帮助你彻底解决 LibreOffice 转换中文 PDF 的乱码难题。如果你在配置Dockerfile或实际应用中遇到了其他问题,欢迎到 云栈社区 的相关板块与大家一起探讨。