You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Headless Chromium在Debian容器生成PDF时非拉丁字符用Type3字体问题

解决Headless Chromium生成PDF时使用Type 3字体的问题

核心原因

Headless Chromium默认未正确识别系统安装的Noto字体,或因渲染策略导致字符被栅格化,生成过时的Type 3字体。

解决方案步骤

1. 安装完整的Noto字体包

仅安装fonts-noto不足以覆盖所有非拉丁字符,需补充安装CJK语言包:

apt-get update && apt-get install -y fonts-noto fonts-noto-cjk fonts-noto-color-emoji

fonts-noto-cjk专门适配中日韩字符,确保中文等非拉丁字符有对应的TrueType字体文件。

2. 调整Chromium启动参数

在原有命令基础上添加强制字体渲染的参数,避免栅格化:

chrome --headless --disable-gpu --no-sandbox \
  --print-to-pdf=output.pdf \
  --font-render-hinting=none \
  --disable-skia-runtime-opts \
  --force-color-profile=srgb \
  non-latin.html

关键参数作用:

  • --font-render-hinting=none:禁用字体渲染时的栅格化处理
  • --disable-skia-runtime-opts:关闭Skia引擎的优化策略,防止强制生成Type 3字体
  • --force-color-profile=srgb:统一色彩配置,减少字体渲染差异

3. 在HTML中显式指定字体(推荐)

直接在HTML代码中指定Noto字体,确保Chromium优先调用TrueType字体:

<html>
<head>
  <style>
    body {
      font-family: 'Noto Sans SC', sans-serif;
    }
  </style>
</head>
<body>
中文内容
</body>
</html>

Noto Sans SC是Noto针对简体中文的专用字体,可直接映射到系统安装的TrueType文件。

4. 验证字体类型

生成PDF后,用pdffonts命令检查字体类型:

pdffonts output.pdf

正常情况下,输出结果中的字体类型应为TrueType,而非Type 3。

补充排查

若问题仍存在,可先确认系统已识别Noto字体:

fc-list | grep "Noto"

若未输出相关字体,需检查字体安装是否完整,或重启容器让字体库生效。

内容的提问来源于stack exchange,提问作者robothy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:57:33