pdf中文显示方框或空白是因系统缺失中文字体且pdf未嵌入字体,需安装poppler-data、正确部署字体并配置fallback链。

PDF中文显示为方框或空白,本质是字体缺失
Linux服务器或桌面环境默认不带中文字体,而PDF里若未嵌入字体(尤其老版本Word导出的PDF),LibreOffice、Evince、Okular等阅读器就会回退到系统字体列表——结果就是□、空白或乱码符号。这不是PDF损坏,也不是阅读器bug,而是系统里压根没有simsun、simhei这类字体文件。
先确认是否真缺字体:用pdffonts查PDF内嵌情况
别急着装一堆包,先看PDF本身有没有把中文字体打进去:
pdffonts yourfile.pdf
如果输出里某行的name列是ABCDEE+SimSun这类带加号前缀,且emb列是no,说明字体没嵌入,必须靠系统提供;如果emb是yes但还是乱码,那可能是字体路径没刷新或阅读器缓存问题。
- Ubuntu/Debian系:运行
sudo apt-get install poppler-data(必需,含CJK字符映射表) - CentOS/RHEL系:用
sudo yum install poppler-data或dnf install poppler-data - 无论哪类系统,
poppler-data不装,中文映射规则就不存在,装了字体也白搭
手动安装Windows中文字体并刷新缓存
从Windows拷来的simsun.ttc、simhei.ttf等不能直接扔进/usr/share/fonts就完事——得让fontconfig识别它们:
- 复制字体到系统级目录:
sudo cp simsun.ttc simhei.ttf /usr/share/fonts/truetype/custom/ - 创建目录如不存在:
sudo mkdir -p /usr/share/fonts/truetype/custom - 重建字体缓存:
sudo fc-cache -fv(注意必须加-v看是否真扫到了新字体) - 验证是否生效:
fc-list :lang=zh应能列出SimSun、SimHei等条目
如果fc-list没输出,说明路径错、权限不足,或字体文件本身损坏(比如从NTFS分区拷贝时被截断)。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
阅读器仍乱码?检查49-sansserif.conf fallback配置
很多PDF没指定字体族名,只写font-family: sans-serif,这时系统靠/etc/fonts/conf.d/49-sansserif.conf决定fallback顺序。默认它不包含中文字体,所以即使你装了simhei.ttf,也不会被选中。
编辑该文件,在<match target="pattern"></match>块内添加一行:
<edit name="family" mode="append_last"><string>SimHei</string></edit>
不要删原有<string>sans-serif</string>,只要追加;多个中文字体可按优先级顺序多加几行,比如先SimSun再SimHei。
改完保存后必须再跑一次sudo fc-cache -fv,否则修改不生效。
字体补全这事,核心就三步:装poppler-data、放对位置并fc-cache、配好fallback链。少一步,PDF里的中文就还在等你“想起来它还没来”。










