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

Docker Alpine 3.10中wkhtmltopdf中文/泰文显示异常如何解决?

问题成因
  1. 字体匹配失效:Alpine 3.10默认的font-noto包虽包含多语言字体,但未单独安装CJK(中日韩)字符对应的子包,且fontconfig未生成有效字体缓存,导致wkhtmltopdf无法找到适配非英文字符的字体文件。
  2. 字体配置未加载:即使安装了多语言字体,若未触发fontconfig缓存更新,系统无法识别新安装的字体,wkhtmltopdf会 fallback 到默认无对应字符的字体,导致乱码。
解决方法

修改Dockerfile,补充CJK字体包并强制更新字体缓存,具体调整如下:

1. 调整后的Dockerfile

FROM alpine:3.10

RUN apk update && apk --no-cache add \
        git libcurl wget \
        curl tzdata procps vim \
        python3 py3-pip \
        zip unzip \
        libsasl \
        openssl \
        libpng \
        libjpeg \
        libjpeg-turbo \
        freetype \
        libxml2 \
        fontconfig \
        icu libzip \
        wkhtmltopdf \
        libgcc libstdc++ libx11 glib libxrender libxext libintl \
        # 新增CJK专用字体包,覆盖中日韩字符需求
        font-noto-cjk \
        font-noto-arabic terminus-font ttf-inconsolata ttf-dejavu font-noto font-noto-extra \
        ttf-dejavu ttf-droid ttf-freefont ttf-liberation ttf-ubuntu-font-family \
        libpng-dev libjpeg-turbo-dev freetype-dev libxml2-dev icu-dev autoconf gcc g++ make libzip-dev \
    # 强制更新fontconfig缓存,让系统识别新安装的字体
    && fc-cache -fv \
    && rm -rf /var/cache/apt/* && rm /var/cache/apk/*

COPY ./test.html ./

2. 重新验证流程

执行以下命令重新构建镜像并测试:

$ docker build -t character_test . 
$ docker run --name character_test character_test wkhtmltopdf ./test.html ./test.pdf
$ docker cp character_test:./test.pdf ./test.pdf
$ docker rm character_test
$ docker rmi character_test

打开生成的PDF即可看到中文等非英文字符正常显示。

额外说明

  • 若泰文等其他语言字符仍有问题,可补充安装对应语言的Noto字体包(如font-noto-thai,需确认Alpine 3.10仓库是否提供)。
  • fc-cache -fv是关键步骤,它会扫描系统字体目录并生成缓存文件,确保wkhtmltopdf能正确检索到所需字体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:36:38