Пользовательский шрифт в mPDF не загружается - PullRequest
0 голосов
/ 08 октября 2018

Я использую версию 7.x mPDF и пытался следовать этой документации: https://mpdf.github.io/fonts-languages/fonts-in-mpdf-7-x.html

Я просто не могу заставить его работать.Нет ошибок, но шрифт по-прежнему является шрифтом mPDF по умолчанию.Я также попытался сделать это по-другому с ответами из этих:

Как сгенерировать PDF с помощью mPDF и добавить собственный шрифт Google к нему?

phpmPDF, невозможно установить семейство шрифтов и размер шрифта

добавление шрифта в mPDF

Но я думаю, что они не работают, так как они могут толькобыть для более старой версии, чем 7.X ... Итак, вот моя последняя попытка использовать информацию для документации 7.x.

Вот мой 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'];

$mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/upload'],
    ['fontdata' => $fontData + [
        'BentonSans' => [
            'R' => 'BentonSans.ttf',
            'I' => 'BentonSans-Bold.ttf',
        ]
    ],
    'default_font' => 'BentonSans'
]);

$url = rawurldecode($_REQUEST['url']);
$html = file_get_contents($url);

$stylesheet = file_get_contents('style.css');

$mpdf->setBasePath($url);
$mpdf->AddFontDirectory('fonts');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html);
$mpdf->Output('filename.pdf','I');

Иmy css:

body {
    font-family: 'BentonSans';
    font-size: 14px; 
    font-style: normal; 
    font-variant: normal; 
    font-weight: normal; 
    line-height: 20px;
}

Мои пользовательские шрифты хранятся в «шрифтах», которые находятся в той же папке, что и файл php.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Проблема в Mpdf версии 7: конфигурация передается как один параметр (массив), когда вы передаете в конструктор несколько параметров.

Это допустимая конфигурация:

$mpdf = new \Mpdf\Mpdf(
    [
        'tempDir'      => __DIR__ . '/upload',
        'fontdata'     => $fontData + [
                'BentonSans' => [
                    'R' => 'BentonSans.ttf',
                    'I' => 'BentonSans-Bold.ttf',
                ],
        ],
        'default_font' => 'BentonSans',
    ]
);
0 голосов
/ 09 октября 2018

Получил это на работу.Не уверен, что сделал трюк, но вот рабочий код:

<?php
require_once __DIR__ . '/vendor/autoload.php';

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 = [
        'bentonsans' => [
            'R' => 'BentonSans.ttf',
            'B' => 'BentonSans-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\Mpdf(['tempDir' => __DIR__ . '/upload']);

add_custom_fonts_to_mpdf($mpdf);

$url = rawurldecode($_REQUEST['url']);
$html = file_get_contents($url);

$stylesheet = file_get_contents('style.css');

$mpdf->setBasePath($url);
$mpdf->AddFontDirectory('fonts');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html);
$mpdf->Output('filename.pdf','I');
?>
...