
最近做项目时用到了 PHP 生成 PDF 的功能,安装 dompdf/dompdf 扩展就能实现,但生成的 PDF 打开后中文全部是乱码。排查下来,主要原因是 dompdf 默认没有加载中文字体,需要额外准备字体文件并完成注册。本文把完整的解决过程记录下来。
一、乱码的根本原因
1. 缺少中文字体支持
dompdf 内置的字体只覆盖拉丁字符集,遇到中文时会找不到对应字形,于是渲染成乱码或方框。这是最核心的原因,只调整 HTML 或 CSS 并不能解决问题。
2. 字体未完成注册
即便把字体文件复制进扩展目录,如果没执行注册脚本,dompdf 依然不知道这个字体的存在。注册这一步是把 ttf 文件转换成 dompdf 可识别的字体描述,缺了它字体不会被加载。
二、完整解决步骤
1. 准备并放置文件
先下载所需文件并解压,将字体文件与处理脚本一起放到 dompdf/dompdf 扩展的根目录下。目录位置要对,否则后续脚本会找不到字体。
2. 修改脚本引入路径
打开 load\_font.php,把里面的引入路径改成本项目实际的 autoload 路径:
require_once '../../../vendor/autoload.php';
具体层级要按你的代码结构来,路径不对会直接报错。
3. 执行注册命令
切换到扩展根目录,执行注册命令,把字体名与字体文件关联起来:
php load_font.php simsun simsun.ttf
执行成功即表示字体已注册完成,之后 dompdf 就能识别中文了。
三、使用时的注意事项
1. 在 CSS 中声明字体
注册成功后,还需要在使用处声明字体,否则 dompdf 不会自动套用:
body, html {
font-family: simsun;
font-size: 12pt;
padding: 0;
margin: 0pt 9pt;
}
2. 确认字体名称一致
CSS 里写的 font-family 必须与注册时指定的字体名完全一致。大小写或拼写不一致都会导致字体失效,乱码问题会再次出现。
关键配置提示
- 字体文件与脚本要放在 dompdf 扩展根目录,路径层级按项目实际情况调整
- 注册命令必须在扩展根目录下执行,否则找不到字体文件
- CSS 中声明的 font-family 必须与注册名一致,注意大小写
评论文章才能查看下载内容

快来评论,快来抢沙发吧~