基于@hrvoje-golcic 的回答,这是一种无需编辑即可将字体添加到 mPDF 的改进且不那么脏的方法config_fonts.php
。我正在使用 Laravel,我使用 composer 安装了 mPDF。
- 正如作者所建议的,
_MPDF_TTFONTPATH
在初始化之前定义一个名为的常量mPDF
,将值作为文件夹的路径ttfonts
(该常量至少从 5.3 开始就存在)。
- 将
vendor/mpdf/mpdf/ttfonts
文件夹复制到您控制的位置(在供应商文件夹之外)。
- 将您的自定义字体与其他字体一起添加到该文件夹中。
- 将您的配置添加到实例的
fontdata
属性中。mPDF
注意:该文件夹大约有90MBttfonts
,因此可能还有更好的方法,但是您必须复制所有字体,因为原始配置添加了它们。请参阅此答案底部的作曲家脚本替代方案。
重要提示: CSS 字体系列将被转换为小写字母 + 无空格,因此“Source Sans Pro”将变为 sourcesanspro。
这是一个例子:
if (!defined('_MPDF_TTFONTPATH')) {
// an absolute path is preferred, trailing slash required:
define('_MPDF_TTFONTPATH', realpath('fonts/'));
// example using Laravel's resource_path function:
// define('_MPDF_TTFONTPATH', resource_path('fonts/'));
}
function add_custom_fonts_to_mpdf($mpdf, $fonts_list) {
$fontdata = [
'sourcesanspro' => [
'R' => 'SourceSansPro-Regular.ttf',
'B' => 'SourceSansPro-Bold.ttf',
],
];
foreach ($fontdata as $f => $fs) {
// add to fontdata array
$mpdf->fontdata[$f] = $fs;
// add to available fonts array
foreach (['R', 'B', 'I', 'BI'] as $style) {
if (isset($fs[$style]) && $fs[$style]) {
// warning: no suffix for regular style! hours wasted: 2
$mpdf->available_unifonts[] = $f . trim($style, 'R');
}
}
}
$mpdf->default_available_fonts = $mpdf->available_unifonts;
}
$mpdf = new mPDF('UTF-8', 'A4');
add_custom_fonts_to_mpdf($mpdf);
$mpdf->WriteHTML($html);
Composer 安装后脚本
无需复制所有字体并将它们添加到 git,使用 composer 安装后脚本的便捷解决方法可以为您做到这一点。
首先,确保您要复制字体的文件夹存在,并.gitignore
在其中创建一个包含以下内容的文件夹:
*
!.gitignore
!SourceSansPro-Regular.ttf
!SourceSansPro-Bold.ttf
这将忽略除.gitignore
文件和您要添加的字体之外的所有内容。
接下来,将以下脚本添加到您的composer.json
文件中:
"scripts": {
"post-install-cmd": [
"cp -f vendor/mpdf/mpdf/ttfonts/* resources/fonts/"
],
"post-update-cmd": [
"cp -f vendor/mpdf/mpdf/ttfonts/* resources/fonts/"
]
}
笔记
经测试可与 6.1 一起使用。
在 7.x 中,作者实现了一种优雅的方式来添加外部字体。