php mpdf 设置字体,php - 将字体添加到mPDF - 堆栈内存溢出

根据@ 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中,作者实现了一种优雅的方式来添加外部字体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值