Как да използвам Font Awesome с MPDF?

Използвам Zend Framework и създавам PDF с mpdf.
Опитвам се да използвам fontawesome за обозначаване на някои от статиите, но шрифтовете на font 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)


РЕДАКТИРАНЕ: В наши дни това е остарял метод и трябва да се използва само в наследени системи.

Препоръчвам отговора по-долу от @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 неща. Добавих и другите фонтанусомни ttfs: ['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