Как использовать Font Awesome с MPDF?

Я использую Zend Framework и создаю PDF с помощью mpdf.
Я пытаюсь использовать fontawesome для обозначения некоторых статей, но шрифты шрифта awesome не отображаются должным образом. Ниже приведен код.

$stylesheet =  file_get_contents("https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css");
$stylesheet .= file_get_contents("https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css");

$this->mpdf->WriteHTML($stylesheet,1);
$this->mpdf->WriteHTML($html,2);
$this->mpdf->allow_charset_conversion = true; 
$this->mpdf->charset_in = 'windows-1252';
$this->mpdf->Output();

Код, который я использую в html

<span class="company-name">&#xf21b; name of the company</span>

Заранее спасибо.


person Mega Fox    schedule 15.07.2015    source источник
comment
посмотрите, я использую PHP около 5 или 6 лет, и каждый раз, когда мне нужно создать PDF, он не соответствует моим ожиданиям (CSS или какие-то другие элементы). Итак, я обнаружил (здесь, в stackoverflow) API, который вы отправляете только свой HTML, а они возвращают PDF точно так же, как ваша страница. Попробуйте: html2pdfrocket.com   -  person ital0    schedule 15.07.2015


Ответы (3)


EDIT: В настоящее время это устаревший метод, и его следует использовать только в устаревших системах.

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


Простой способ:

  1. Скопируйте файл fontawesome-webfont.ttf в каталог /mPDF/ttfonts/.

  2. Отредактируйте /mPDF/config_fonts.php, найдите массив, начатый $this->fontdata, и добавьте к нему:

"fontawesome" => array(
    'R' => "fontawesome-webfont.ttf",
),
  1. Правильно измените CSS вашего документа, используя новое семейство шрифтов. Например.:
$stylesheet = '.company-name { font-family: fontawesome; }';
  1. Когда вы создаете экземпляр класса, оставьте первый параметр пустым:

Eg.:

$mpdf = new mPDF();

or

$mpdf = new mPDF('', 'A4');

Я протестирован с mPDF 6.0, и это сработало.

Кроме того, в руководстве по mPDF объясняется, как это сделать с дополнительными параметрами: Шрифты в mPDF 6.x

person Lord_Dracon    schedule 17.08.2015
comment
Хорошая идея! Добавлен $pdf->WriteHTML('.fa { font-family: fontawesome;}',1);, чтобы я мог использовать его как настоящий: <i class="fa">&#xf0e7;</i> в качестве примера для вспышки. Юникод находится прямо под гигантским значком на странице и должен иметь префикс &#x. - person Martin Schilliger; 18.02.2017
comment
@MartinSchilliger хорошая идея, отлично работает ... Но я добавил font-style: normal;, потому что по умолчанию тег <i> показывает значки курсивом! - person Meloman; 21.05.2021

Более свежее решение для Font Awesome 5.x и mPDF 7.x, когда вы не хотите редактировать исходные файлы/директории из mPDF: https://mpdf.github.io/fonts-languages/fonts-in-mpdf-7-x.html

В моем случае это предлагает использование шрифтов, поставляемых mPDF, fontawesome и другого пользовательского шрифта (в данном случае ibmplex). Обратите внимание, что при указании имени шрифта, такого как 'ibmplex' и 'fontawesome', оно пишется в нижнем регистре. Чтобы избежать путаницы, почему шрифт не работает, я бы посоветовал использовать строчные буквы и не использовать пробелы для имен.

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

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

$mpdf = new \Mpdf\Mpdf([
    'fontDir' => array_merge($fontDirs, [
        __DIR__ . '/../../resources/fonts',
    ]),
    'fontdata' => $fontData + [
        'ibmplex' => [
            'R' => 'IBMPlexSans-Regular.ttf',
            'B' => 'IBMPlexSans-Bold.ttf',
            'I' => 'IBMPlexSans-Italic.ttf',
        ],
        'fontawesome' => [
            'R' => 'fa-solid-900.ttf'
        ],
    ],
    'default_font' => 'ibmplex',
    'format' => 'A4'
]);

Затем вы можете использовать

<span style="font-family: fontawesome;">&#xf3ed;</span>

Согласно https://fontawesome.com/cheatsheet -- обратите внимание, что f3ed фактический значок в этом случае.

person Arie    schedule 05.11.2019
comment
Работает как шарм. Я просто пропустил все ibmplex. Я также добавил другие классные шрифты ttf: ['fontawesome' => ['R' => 'fa-regular-400.ttf'], 'fontawesome-solid' => ['R' => 'fa-solid-900.ttf'], 'fontawesome-brands' => ['R' => 'fa-brands-400.ttf']] И в моем CSS я добавил вспомогательные классы: .fa { font-family: fontawesome; } .fas { font-family: fontawesome-solid; } .fab { font-family: fontawesome-brands; } - person Chris; 22.05.2021
comment
Я думаю, что это лучшее решение на сегодняшний день. Я отредактировал свой ответ выше с этой заметкой. - person Lord_Dracon; 22.05.2021

На самом деле, если вы установили mPdf с композитором, добавьте следующие строки в файл, расположенный в vendor\mpdf\mpdf\src\Config\FontVariables.php

"fontawesome" => [ 
                    'R' => "fontawesome-webfont.ttf",
                ],

внутри раздела 'fontdata'

person LordZyx    schedule 01.12.2020
comment
Не рекомендуется вручную изменять файлы в папке поставщика. Лучшим решением для тех, кто установил композитор, является решение @Arie выше. - person Lord_Dracon; 22.05.2021