Блог CREATIVE

Dompdf и кириллические шрифты

Статьи Разработка



Существует несколько библиотек для создания pdf-файла средствами php. Но в нашей разработке наиболее удобной показалась dompdf: она может одной командой конвертировать несложный html в pdf, что позволяет использовать обыкновенные файлы шаблонов для генерации pdf; понимает множество разных стилей в css; работает довольно шустро на файлах с адекватным объемом.


И все же подключить выбранный заказчиком шрифт оказалось не так-то просто.

Все шрифты в стандартной поставке библиотеки не содержат кириллических символов. Поэтому при попытке использовать один из них мы увидим в файле вместо букв знаки вопроса. Тем не менее, выход есть: как гласит официальная документация, с недавних пор в стандартную поставку было включено семейство шрифтов DejaVu с полной поддержкой UTF-8. Но что делать, если заказчик все же настаивает на том, чтобы использовать определенный шрифт?

1. Прежде всего, обращаемся к данной статье. Находим в интернете ttf-файлы для всего семейства нашего шрифта, а именно: нормальное начертание, курсив, полужирное, полужирный курсив. И скачиваем их в наш проект.

2. Скачиваем в наш проект файл load_font.php из репозитория.

3. Указываем в третьей строке путь к автозагрузчику composer или самого

dompdf.require_once "/var/www/my_site/vendor/autoload.php"

В восьмой строке указываем путь, по которому будут созданы файлы шрифтов, пригодные для использования в dompdf.

$fontDir = "/var/www/my_site/fonts";

Запускаем файл load_font.php в командной строке и прописываем название шрифта, которое будем использовать в нашем шаблоне, например, dompdf_arial, и пути к файлам шрифтов.

php load_font.php dompdf_arial
/var/www/my_site/fonts/arial.ttf/var/www/my_site/fonts/arial_bold.ttf/var/www/my_site/fonts/arial_italic.ttf
/var/www/my_site/fonts/arial_bold_italic.ttf

Теперь в нашем html мы можем использовать запись вида

body {font-family: dompdf_arial;}.

Еще один важный момент: по умолчанию dompdf создает файлы шрифтов в папке внутри папки vendor. При использовании composer это не очень удобно потому, что при переносе между площадками файлы шрифтов будут теряться. Именно поэтому мы и сгенерировали наш файл внутри папки fonts. Следует учитывать это при дальнейшем использовании dompdf:

$html = '...'; //сформированный html для конвертации в pdf
$dompdf = new Dompdf(['fontDir' => '/var/www/my_site/fonts', //указываем путь к папке, в которой лежат скомпилированные шрифты'defaultFont' => 'dompdf_arial', //делаем наш шрифт шрифтом по умолчанию
]);
$dompdf->load_html($html, 'UTF-8');
$dompdf->render();