You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在mPDF 7中注册自定义字体遇到问题

解决mPDF 7.0.3注册Google Fonts自定义TTF字体的问题

我之前也踩过mPDF 7.x版本注册自定义字体的坑,结合官方文档和实际排查经验,给你梳理几个关键的修复点:

1. 先确认字体路径的正确性

你代码里的__DIR__ . '/files/theme/fonts/Merriweather...大概率没写完整,而且要注意:mPDF需要的是字体文件所在的文件夹路径,不是单个字体文件的路径。

  • 先验证路径是否存在:可以加一行var_dump(is_dir(__DIR__ . '/files/theme/fonts/Merriweather'));,如果返回false,说明路径拼写错误或者文件夹不存在。
  • 注意系统大小写:Linux服务器下路径和文件名是大小写敏感的,要确保和实际文件完全一致。

2. 补全字体数据的配置

官方示例只是给出了框架,你需要手动添加自定义字体的具体字重和样式映射,比如:

// 在获取默认fontData后,添加你的字体信息
$fontData['merriweather'] = [
    'R' => 'Merriweather-Regular.ttf',   // 常规体
    'B' => 'Merriweather-Bold.ttf',       // 粗体
    'I' => 'Merriweather-Italic.ttf',     // 斜体
    'BI' => 'Merriweather-BoldItalic.ttf' // 粗斜体
];

这里的merriweather是你后续在CSS中要引用的字体标识,要和实际TTF文件名一一对应。

3. 完整的mPDF初始化代码

把路径合并、字体配置整合完整,正确的代码应该是这样:

// 获取默认配置
$defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];

$defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];

// 追加自定义字体数据
$fontData['merriweather'] = [
    'R' => 'Merriweather-Regular.ttf',
    'B' => 'Merriweather-Bold.ttf',
    'I' => 'Merriweather-Italic.ttf',
    'BI' => 'Merriweather-BoldItalic.ttf'
];

// 初始化mPDF,合并配置
$pdf = new \Mpdf\Mpdf([
    'fontDir' => array_merge($fontDirs, [
        __DIR__ . '/files/theme/fonts/Merriweather' // 确保这是字体文件夹的正确路径
    ]),
    'fontdata' => $fontData,
    'default_font' => 'merriweather' // 可选:设置默认字体为自定义字体
]);

4. 验证字体是否加载成功

初始化mPDF后,可以用$pdf->showFonts();输出所有已加载的字体列表,看看你的Merriweather是否在其中——如果不在,说明路径或配置有问题;如果在,那就是CSS引用的问题。

5. CSS中正确引用字体

生成PDF时,要在样式里指定你配置的字体标识:

body {
    font-family: 'merriweather', serif;
}

这里的merriweather要和你在fontData里设置的键名完全一致,不能直接写“Merriweather”(除非你把键名设成这个)。

6. 排查服务器权限问题

如果是在线上服务器运行,要确保mPDF进程有读取字体文件夹的权限:

  • 给字体文件夹设置755权限
  • 给TTF文件设置644权限

内容的提问来源于stack exchange,提问作者Niklas Gruhn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:39:41