HTML в PDF средствами Dompdf

Давненько я тут не писал.

Сразу к делу: недавно столкнулся с задачей реализовать простенькую печатную форму.

На голом HTML её делать бесполезняк — можно легко столкнуться с «особенностями» браузера из которого производится печать. Собственно решил перегнать html в PDF и уже этот формат использовать в качестве печатного.

В качестве библиотеки выбрал Dompdf — она понимает стили вроде max-width и max-height и умеет работать с картинками.

Порядок действий:

  1. Собственно качаем dompdf: тык
  2. Заливаем содержимое на свой сервак.
  3. Формируем сниппет кода. Принцип прост: html-ку запихиваем в буфер вывода, а уже потом её используем в качестве содержимого PDF-ки:

<?
require_once ($_SERVER['DOCUMENT_ROOT'].'/dompdf/autoload.inc.php');
use Dompdf\Dompdf;

//буферизируем вывод
ob_start();
?>
<!DOCTYPE html>
<html>
    <head>
        <title><?=$res['PROPERTY_FIO_VALUE']?></title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <style>
        /*Отступы на самой PDF странице:*/
        @page { margin: 10px; }
        /*стили...*/
        </style>
    </head>
    <body>
    <!--содержимое body-->
    </body>
</html>
<?
$html = ob_get_clean(); //останавливаем буферизацию, запихиваем буфер в $html

$dompdf = new Dompdf();

//дефолтный шрифт - dejavu sans, т.к. он поддерживает кириллицу
$dompdf->set_option('defaultFont', 'dejavu sans');
//даём возможность читать внешние ссылки (для отображения картинок извне)
$dompdf->set_option('isRemoteEnabled', true);
//запихиваем html-ку в преобразователь
$dompdf->loadHtml($html);
//ставим A4 вертикально
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF - рендерим
$dompdf->render();
// Output the generated PDF to Browser
$dompdf->stream('лолкекчебурек.pdf',array('Attachment'=>0));