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

Yii2中Kartik yii-mpdf自定义字体配置文件的存放与调用

Yii2 Kartik yii-mpdf 自定义字体配置文件存放与调用方案

一、配置文件存放位置

建议将custom_config.php放在项目的配置目录子文件夹中,比如@app/config/pdf/custom_config.php(@app对应项目根目录)。这样既符合Yii2的配置文件管理规范,也方便后续维护。

二、修正配置文件内容

你的custom_config.php不需要直接实例化Mpdf对象,而是返回配置数组即可,修改后的代码如下:

<?php
require_once __DIR__ . '/../../vendor/autoload.php'; // 按需调整vendor路径

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

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

return [
    'mode' => 'utf-8',
    'format' => [190, 236],
    'tempDir' => Yii::getAlias('@webroot/css/fonts'), // 使用Yii别名更可靠
    'fontDir' => array_merge($fontDirs, [
        Yii::getAlias('@webroot/css/fonts/tajawal')
    ]),
    'fontdata' => $fontData + [
        'tajawal' => [
            'R' => "Tajawal-Regular.ttf",
            'L' => "Tajawal-Light.ttf",
            'B' => "Tajawal-Bold.ttf",
            'useOTL' => 0xFF,
            'useKashida' => 75,
        ],
    ],
    'default_font' => 'tajawal'
];

三、在Yii2组件中调用配置

修改/config/web.php中的pdf组件配置,通过options项引入自定义配置文件,使用Yii的路径别名替代硬编码路径:

'pdf' => [
    'class' => Pdf::classname(),
    'format' => Pdf::FORMAT_A4,
    'orientation' => Pdf::ORIENT_PORTRAIT,
    'destination' => Pdf::DEST_BROWSER,
    'cssFile' => '@vendor/kartik-v/yii2-mpdf/src/assets/kv-mpdf-bootstrap.min.css',
    'cssInline' => '.row { margin: 5px 0px 0px 0px !important; padding: 0px !important; }',
    'methods' => [
        'SetTitle' => 'Title',
    ],
    'options' => [
        'config' => Yii::getAlias('@app/config/pdf/custom_config.php'), // 指向你的配置文件
    ],
],

四、控制器调用保持不变

你的控制器代码无需额外修改,原有的调用逻辑可以正常使用自定义字体:

$pdf = Yii::$app->pdf;
$pdf->methods = [
    'SetTitle' => $pdfTitle ,
];

$mpdf = $pdf->api;
$mpdf->setAutoBottomMargin = 'pad';

if($language == 0) {
    $mpdf->SetDirectionality('ltr');
} else {
    $mpdf->SetDirectionality('rtl');
}
$pdf->content = $content;

return $pdf->render();

内容的提问来源于stack exchange,提问作者Mohammad Kabalan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:22:10