根据@ hrvoje-golcic的回答,这里是一种改进的,不那么脏的方法,可以在不编辑config_fonts.php情况下将字体添加到mPDF。 我正在使用Laravel,我使用composer安装了mPDF。
正如笔者建议,定义一个常量名为_MPDF_TTFONTPATH初始化之前mPDF与价值的路径,你ttfonts文件夹(因为至少5.3这个常数存在)。
将vendor/mpdf/mpdf/ttfonts文件夹复制到您控制的位置(在vendor文件夹之外)。
将自定义字体与其他字体一起添加到该文件夹。
将配置添加到mPDF实例上的fontdata属性。
抬头 : ttfonts文件夹大约有90MB,所以仍然可能有更好的方法,但是你需要复制所有字体,因为原始配置会添加它们。 请参阅本答案底部的composer script alternative。
重要提示: CSS font-family将转换为小写+ nospace,因此“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。
首先,确保存在要复制字体的文件夹,并在其中创建.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中,作者实现了一种优雅的方式来添加外部字体。