找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

717

积分

0

好友

90

主题
发表于 17 小时前 | 查看: 0| 回复: 0

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

LibreOffice版本验证

2)导入中文字体

仅安装语言包还不够,你需要在系统中添加可用的中文字体。首先创建一个用于存放中文字体的目录。

mkdir -p /usr/share/fonts/chinese

接下来,将 Windows 系统(路径 C:\Windows\Fonts)中的黑体(SimHei)和宋体(SimSun)字体文件,复制到容器或系统的 /usr/share/fonts/chinese 目录中。

Windows字体管理界面

复制完成后,修改字体目录的权限并验证文件是否已存在。

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、中文语言包以及中文字体的安装与配置,这对需要在容器化环境中进行文档转换的运维工作很有帮助。

Dockerfile配置示例

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或实际应用中遇到了其他问题,欢迎到 云栈社区 的相关板块与大家一起探讨。




上一篇:三极管基极-发射极并联电阻的作用与选型:防止误触发与加速关断详解
下一篇:FortiGate防火墙遭自动化攻击,SAML SSO漏洞致配置数据失窃
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-25 20:53 , Processed in 0.575513 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表