同一张分享卡片,本地 Chrome 截图正常,线上容器截出来中文全是方块,英文正常。容器镜像基于 slim,fc-list 只有 DejaVu 三个字体。日志里能对上时间点,这种反而好排。
无头浏览器渲染用的是系统字体,容器里没有中文字体,font-family 找不到就落到 notdef。本地开发机装过中文字体,所以复现不了。截图服务不会因为缺字体报错,只能从图上看出来。这一点先确认清楚,后面就不用反复试。
apt-get install -y fonts-noto-cjk fc-cache -fv fc-list :lang=zh | head -5
「Chrome 截图字体缺失」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
处理上按这个顺序:镜像里装思源黑体或 Noto Sans CJK 并刷新字体缓存;CSS 字体栈把中文字体名写在前面 别只写 sans-serif;启动时跑一次 fc-list 确认字体可见;固定截图尺寸和 deviceScaleFactor 保证多机一致。
结果对不对很好判断,容器里 fc-list 能列出中文字体,截图里的中文标题和按钮文字都正常显示,和本地对比像素差在 1% 以内。
