После того, как я создам собственный файл конфигурации для изменения типа шрифта в mpdf-yii2, куда мне следует поместить этот файл и как его вызвать. это custom_config.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
$defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdfConfig = new \Mpdf\Mpdf([
'mode' => 'utf-8',
'format' => [190, 236],
'tempDir' => __DIR__ . '/web/css/fonts',
'fontDir' => array_merge($fontDirs, [
__DIR__ . 'web/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'
]);
это конфигурация этой библиотеки в /config/web.php
'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',
],
],
и этот код в контроллере.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();
Я попробую, этот код добавил опции
'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',
// 'marginLeft'=>0,
// 'marginRight'=>0,
// 'marginFooter'=>20,
'cssInline' => '.row { margin: 5px 0px 0px 0px !important; padding: 0px !important; }',
'methods' => [
'SetTitle' => 'Title',
],
'options' => [
'config' => $_SERVER['DOCUMENT_ROOT'].'/css/fonts/config-fonts.php',
],
🤔 А знаете ли вы, что...
PHP поддерживает работу с куки для управления данными между запросами.
Смотрим исходный код kartik\mpdf\Pdf
класса. Он создает собственный экземпляр объекта Mpdf
. Поэтому создание собственного экземпляра в custom_config.php
не поможет вам при работе с Yii::$app->pdf
.
Глядя на то, как экземпляр Mpdf
создается внутри класса Pdf
, все, что установлено в его свойстве options
, будет передано в Mpdf
как параметр конструктора после того, как некоторые значения будут перезаписаны свойствами компонента Pdf
. Это означает, что все, что вы передаете конструктору Mpdf
в своем custom_config.php
, необходимо настроить в свойстве options
при настройке Pdf
компонента.
Чтобы сохранить ваш config/web.php
в чистоте, вы можете подготовить параметры в дополнительном файле, например config/pdf.php
:
$defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
return [
// your font configurations
'fontDir' => array_merge($fontDirs, [
dirname(__DIR__) . '/web/css/fonts/tajawal', // the dirname() is used here because __DIR__ points to `config` directory.
]),
'fontdata' => $fontData + [
'tajawal' => [
'R' => "Tajawal-Regular.ttf",
'L' => "Tajawal-Light.ttf",
'B' => "Tajawal-Bold.ttf",
'useOTL' => 0xFF,
'useKashida' => 75,
],
],
// keep defaults that are set up in Pdf::$options
'autoScriptToLang' => true,
'ignore_invalid_utf8' => true,
'tabSpaces' => 4,
];
Как видите, я исключил параметры mode
, format
, tempDir
и default_font
, поскольку они перезаписываются свойствами компонента Pdf
, поэтому нам нужно установить их там.
Вам не нужно требовать vendor/autoload.php
, поскольку он уже включен в файл web/index.php
до загрузки конфигурации.
Теперь нам нужно использовать этот файл в настройках вашего компонента Pdf
в config/web.php
.
'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',
],
'mode' => Pdf::MODE_UTF8, // we will use constant defined in Pdf class instead of plain text
'tempPath' => dirname(__DIR__) . '/web/css/fonts', // tempDir uses tempPath property instead. Make sure the path to temp dir matches actual directory structure
'defaultFont' => 'tajawal',
'options' => require __DIR__ . '/pdf.php', // here we use the extra file with pdf configuration we've prepared
],
Это должно гарантировать, что экземпляр Mpdf
в компоненте Pdf
создан с настроенной вами конфигурацией.