
Существует несколько библиотек для создания 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();