MPDF 7.x无法加载自定义Tahoma字体问题求助
你已经做了大部分正确的配置,但还是显示默认字体,我帮你排查几个常见的问题,按步骤来试试:
1. 先确认字体文件路径是否绝对正确
你用了__DIR__ . '/customFontsMPDF'来指定字体目录,但有时候路径层级或者拼写容易出错。先在初始化MPDF之前加几行代码验证:
// 检查目录是否存在 var_dump(is_dir(__DIR__ . '/customFontsMPDF')); // 检查字体文件是否存在 var_dump(file_exists(__DIR__ . '/customFontsMPDF/tahoma.ttf')); var_dump(file_exists(__DIR__ . '/customFontsMPDF/tahomabd.ttf'));
如果输出false,说明路径不对——比如__DIR__是当前脚本所在的目录,而customFontsMPDF其实在上级目录?那你需要调整路径,比如改成__DIR__ . '/../customFontsMPDF'。
2. 清除MPDF的字体缓存
MPDF会自动缓存字体文件,如果你之前有过错误配置,缓存的旧数据会导致新配置不生效。找到MPDF的缓存目录:
- 默认缓存目录是脚本所在目录下的
tmp/mpdf文件夹,或者系统临时目录 - 删除这个目录下所有和字体相关的缓存文件(比如以
fontdata开头的文件,或者整个tmp/mpdf目录) - 重新运行你的脚本,MPDF会重新生成字体缓存
3. 调整MPDF初始化配置的细节
明确指定默认字体
在MPDF的配置数组里加上default_font参数,强制默认使用Tahoma,先绕过CSS测试字体是否能加载:
$mpdf = new \Mpdf\Mpdf([ 'mode' => 'utf-8', // 把'en'改成utf-8,避免模式限制字体 'default_font' => 'tahoma', // 新增这行,强制默认字体 'default_font_size' => 10, 'margin_left' => 9.5, 'margin_right' => 0, 'margin_top' => 42.5, 'margin_bottom' => 0, 'margin_header' => 7.1, 'margin_footer' => 2, 'fontDir' => array_merge($fontDirs, [__DIR__ . '/customFontsMPDF']), 'fontData' => $fontData + [ 'tahoma' => [ 'R' => 'tahoma.ttf', 'B' => 'tahomabd.ttf' ] ] ]);
如果这样生成的PDF显示Tahoma,说明之前的问题可能是CSS加载或者优先级的问题;如果还是显示默认字体,那就是字体配置本身的问题。
检查fontData的键名大小写
有些字体的内部名称是首字母大写的,试试把fontData的键改成'Tahoma',同时CSS里也改成font-family: 'Tahoma';:
'fontData' => $fontData + [ 'Tahoma' => [ // 首字母大写 'R' => 'tahoma.ttf', 'B' => 'tahomabd.ttf' ] ]
CSS里:
body { font-family: 'Tahoma'; font-size: 8pt; }
4. 验证CSS是否正确加载
有时候file_get_contents('css.css')可能因为路径问题读取不到CSS文件,先验证CSS内容是否正确加载:
$cssContent = file_get_contents('css.css'); var_dump($cssContent); // 看看输出的是不是你的CSS内容 $mpdf->WriteHTML('<style>' . $cssContent . '</style>');
如果输出false,说明CSS文件路径不对,需要调整file_get_contents的路径,比如改成__DIR__ . '/css.css'。
5. 直接用行内样式测试
先跳过外部CSS,用行内样式测试字体是否生效:
$mpdf->WriteHTML('<p style="font-family: tahoma; font-size: 8pt;">测试Tahoma字体显示</p>');
如果这个能显示Tahoma,说明是外部CSS的加载问题;如果还是不行,回到前面的步骤检查字体配置和缓存。
内容的提问来源于stack exchange,提问作者Joshua Bakker




