dompdf 在 codeigniter 中显示中文乱码的根本原因是字体文件未加载、defaultfont 未生效、html 编码未对齐;需依次确认字体目录权限与 .ufm 文件生成、显式设置绝对路径的 fontdir 和 defaultfont、模板中声明 utf-8 编码并匹配 font-family 名称。

Dompdf 在 CodeIgniter 中显示中文乱码,根本原因不是 PHP 版本或框架本身,而是字体文件没加载、defaultFont 没生效、HTML 编码没对齐这三件事没做对。只要顺序踩准,10 分钟内就能让「你好世界」正常出现在 PDF 里。
确认 Dompdf 字体目录路径和权限
CodeIgniter 项目里 Dompdf 的 lib/fonts/ 目录必须可读可写,否则 .ufm 字体度量文件无法自动生成,后续所有字体配置都会静默失败。
- 检查实际路径是否为
application/third_party/dompdf/lib/fonts/(常见于手动集成)或vendor/dompdf/dompdf/lib/fonts/(Composer 安装) - 把中文字体 TTF 文件(如
simhei.ttf或SourceHanSansSC-Regular.otf)直接丢进该目录 - 执行一次
chmod -R 755 lib/fonts/(Linux/macOS)或确保 Windows 下 IIS/Apache 用户有读取+写入权限 - 别跳过验证:生成 PDF 后去
lib/fonts/看有没有对应名称的.ufm文件(例如simhei.ufm),没有就说明字体没被识别
在 CodeIgniter 中正确初始化 Dompdf 并设置 defaultFont
很多乱码问题出在 CodeIgniter 的 autoloader 和 Dompdf 初始化时机上——defaultFont 必须在 new Dompdf() 前设好,且不能依赖全局配置文件。
- 不要在
config/dompdf.php里设defaultFont(Dompdf 不读这个) - 在控制器或库中显式传参:
$options = new \Dompdf\Options(); $options->set('fontDir', FCPATH . 'application/third_party/dompdf/lib/fonts/'); $options->set('defaultFont', 'simhei'); $dompdf = new \Dompdf\Dompdf($options); - 确保
fontDir是绝对路径(用FCPATH或realpath()),相对路径在 CLI 或子目录下极易失效 - 如果用了 Composer,路径可能是
vendor/dompdf/dompdf/lib/fonts/,别硬写成dompdf/lib/fonts/
HTML 模板里的编码与 CSS 字体声明必须同步
即使字体和 PHP 配置全对,HTML 模板里一个 <meta charset="GBK"> 灏辫兘璁╀腑鏂囧彉鏂瑰潡銆侱ompdf 瀵











