Yii框架用mPDF生成PDF看不到内容,通常因中文字体未注册、HTML结构不兼容(如禁用flex/float、表格缺border属性)或响应头缺失导致;需显式配置fontDir与fontdata、用table布局、设置Content-Type和Content-Disposition头。

Yii框架里用mPDF生成PDF却看不到内容,通常不是“没输出”,而是PDF生成环节卡在了字体、HTML结构或响应头这几个关键点上。重点排查这三块,基本能定位问题。
中文字体没配好,内容变空白或方块
mPDF默认不带中文字体,中文内容会渲染失败,看起来像“空页”或满屏□□□。必须显式加载并注册字体:
- 把 simkai.ttf、msyh.ttf 等中文字体文件复制到项目 @app/fonts/ 目录下(不能放在 web/ 下)
- 初始化 mPDF 时指定字体路径和映射,例如:
$mpdf = new \Mpdf\Mpdf([
'fontDir' => '@app/fonts/',
'fontdata' => [
'kai' => ['R' => 'simkai.ttf'],
'msyh' => ['R' => 'msyh.ttf']
],
'default_font' => 'kai'
]); - 避免只写
autoScriptToLang = true就以为够了——它依赖已注册的字体,没注册等于白设
HTML内容没传进去,或格式不被mPDF识别
mPDF对HTML解析很严格,常见“无输出”其实是HTML没正确喂给它:
- 确认你调用了
$mpdf->WriteHTML($html),且$html是非空字符串(可用var_dump(strlen($html))检查) - 禁用 Bootstrap 的 flex、float、position:fixed 等CSS,这些在mPDF里基本失效,可能导致布局塌陷、内容被挤出可视区
- 表格务必用
或内联
style="border:1px solid #000",仅靠 CSSborder-collapse不生效- 页眉页脚要用 mPDF 原生标签:
和,别用@page { @top-center { ... } }响应头或输出方式错误,浏览器没触发下载或展示
即使PDF生成成功,如果响应头不对,浏览器可能当成乱码或直接忽略:
- 导出PDF时必须设置两个关键响应头:
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="report.pdf"'); - 不要用
$mpdf->Output()默认行为(直接输出到浏览器),改用$mpdf->Output('report.pdf', 'D')强制下载,或'I'内联显示 - 确保没有前置输出(如 echo、空格、BOM头),否则 header 会报错,PDF流被截断
- 页眉页脚要用 mPDF 原生标签:











