PHP用TCPDF或mPDF导出PDF出现空白页,主因是中文字体缺失或路径配置错误;需验证字体文件真实存在、使用UTF-8兼容的TrueType字体、正确注册字体并确认嵌入成功。

PHP用TCPDF或mPDF导出PDF时出现空白页,常见原因是中文字体缺失或路径配置错误。中文内容无法渲染,引擎就跳过文本绘制,结果生成空PDF。
确认字体文件真实存在
别只看代码里写的路径,要实际检查服务器上该文件是否存在:
- 用realpath()或file_exists()打印验证路径是否正确
- 确保字体是支持UTF-8的TrueType(.ttf),比如simhei.ttf、NotoSansCJKsc-Regular.ttf
- 权限需为Web用户可读(如www-data或nginx用户)
mPDF中正确注册中文字体
mPDF 8+ 推荐用addFont()动态加载,而非改配置文件:
- 把字体文件放在项目目录下,例如/var/www/html/fonts/simhei.ttf
- 代码中调用:
$mpdf->addFont('simhei', '', 'fonts/simhei.ttf', true); - 使用时指定:
$mpdf->WriteHTML('你好世界');
TCPDF手动设置字体路径与别名
TCPDF默认不自动识别中文路径,必须显式声明:
立即学习“PHP免费学习笔记(深入)”;
- 先设置字体目录:
$pdf->setFontPath(PDF_FONT_DIR . '/custom/'); - 再添加字体映射:
$pdf->addTTFfont('/var/www/html/fonts/simhei.ttf', 'TrueTypeUnicode', '', 32); - 最后使用:
$pdf->SetFont('simhei', '', 12);
调试小技巧:快速验证是否生效
在导出前加一段测试输出,避免反复下载PDF:
- 用$mpdf->Output('', 'S')返回字符串,然后echo htmlspecialchars()查看原始内容
- 临时关闭ob_end_clean()和exit,用file_put_contents('debug.pdf', $pdf->Output('', 'S'))保存到服务器本地检查
- 打开PDF用Adobe Acrobat「属性→字体」确认中文字体是否嵌入成功



















