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

Posted

技术标签:

【中文标题】在 mPDF 7 中注册自定义字体时遇到问题【英文标题】:Trouble registering custom fonts in mPDF 7 【发布时间】:2018-05-03 10:12:55 【问题描述】:

我正在使用 mPDF 7.0.3。我尝试注册从 Google 字体(TTF 格式)下载的自定义字体。我基本上抄了the example from the documentation:

$defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];

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

$pdf = new \Mpdf\Mpdf([
  'fontDir' =>  array_merge($fontDirs, [
    __DIR__ . '/files/theme/fonts/Merriweather',
    __DIR__ . '/files/theme/fonts/Roboto',
  ]),

  'font_data' => $fontData + [
    "Merriweather" => [
        'L'  => 'Merriweather-Light.ttf',
        'R'  => 'Merriweather-Regular.ttf',
        'RI' => 'Merriweather-Italic.ttf',
        'B'  => 'Merriweather-Bold.ttf',
        'useOTL' => 0xFF,
        'useKashida' => 75,
    ],
    "Roboto Mono" => [
      'L' => 'Roboto-Light.ttf',
      'R' => 'Roboto-Regular.ttf',
      'M' => 'Roboto-Medium.ttf',
      'useOTL' => 0xFF,
      'useKashida' => 75,
    ]
  ],
  'default_font' => 'Merriweather'
]);

不过,我的 PDF 是使用后备字体生成的。我还在this example 之后实现了一个 Monolog 记录器。它的输出表明有

使用了 5 种字体 "context":"statistics" []

即使我故意在fontDir 中传递不存在的路径,也没有错误消息。当我删除 default_font 属性时,日志只计算使用的 4 种字体。

有什么想法可以从哪里来,或者我可以如何进一步调查这个问题?

【问题讨论】:

【参考方案1】:

我的错!

如this part of the manual 中所述,mPDF 要求字体名称为小写且不含空格。像这样声明我的字体:

"merriweather" => [
   ...
],
"robotomono" => [
  ...
]

解决了这个问题。

在 CSS 中,我仍然将我的字体称为 MerriweatherRoboto Mono

【讨论】:

以上是关于在 mPDF 7 中注册自定义字体时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

无法在 PDF 上添加自定义字体

如何在yii2中向kartik yii-mpdf添加自定义字体

如何在 mPDF 中设置自定义页面大小? Mpdf版本7

在 Heroku 的模板中使用自定义字体时遇到问题

使用自定义字体时,UIBarButtonItem 在后退手势上跳转

使用 MPDF 生成 pdf,非中断空间显示为不支持的字符