Основываясь на ответе @hrvoje-golcic, вот улучшенный и менее грязный способ добавления шрифтов в mPDF без редактирования config_fonts.php
. Я использую Laravel, я установил mPDF с помощью composer.
- Как предложил автор, определите константу с именем
_MPDF_TTFONTPATH
перед инициализацией mPDF
со значением в качестве пути к вашей папке ttfonts
(эта константа существует по крайней мере с версии 5.3).
- Скопируйте папку
vendor/mpdf/mpdf/ttfonts
в место, которым вы управляете (вне папки поставщика).
- Добавьте свои пользовательские шрифты в эту папку вместе с другими.
- Добавьте свою конфигурацию в свойство
fontdata
экземпляра mPDF
.
Внимание: папка ttfonts
имеет размер около 90 МБ, поэтому, возможно, есть лучший способ, но вам придется скопировать все шрифты, поскольку они добавляются в исходную конфигурацию. См. альтернативу сценария композитора внизу этого ответа.
ВАЖНО: семейство шрифтов CSS будет преобразовано в нижний регистр + без пробелов, поэтому 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 автор реализовал элегантный способ добавления внешних шрифтов.
person
s3v3n
schedule
09.01.2017