解决dompdf/dompdf使用中文乱码的问题

2007 ℃ 0 条
内容摘要本文记录使用 dompdf 生成 PDF 时中文显示乱码的完整解决过程,从乱码根本原因、字体文件放置位置、load_font.php 引入路径修改,到执行字体注册命令与 CSS 字体声明逐项说明,并附可直接套用的代码片段,帮你快速解决中文输出乱码问题。
解决dompdf/dompdf使用中文乱码的问题

解决dompdf/dompdf使用中文乱码的问题

最近做项目时用到了 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 必须与注册名一致,注意大小写

评论文章才能查看下载内容

发表评论 (已有0条评论)

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