Dompdf – мощнейший PHP-класс для конвертирования HTML-документов в PDF-файлы
Не так давно передо мной встала задача – организовать экспорт HTML-данных в один из популярных графических файлов или же в PDF.
Поскольку получать на выходе картинку в данном случае мне показалось безумием, я решил остановиться на PDF.
Поискав информацию в Интернете и испробовав уйму различных вариантов реализации похожего функционала, я обнаружил, что часть из них работают некорректно, а часть – попросту не работает с кириллицей (русским языком).
Это, конечно, меня не огорчило, и потратив еще немного времени (как говорится, кто ищет – тот всегда найдет), я нашел-таки тот инструмент, который помог мне решить поставленные задачи.
Это класс «Dompdf» для PHP. Что же он из себя представляет?
- Есть поддержка русского языка.
- Полностью бесплатен.
- Легок в использовании.
- Открытый исходный код.
- Поддержка HTML-разметки и CSS-стилей.
- Поддержка изображений.
Возможно, что-то забыл упомянуть, но согласитесь – звучит впечатляюще.
Так вот, именно этот класс помог мне превратить некий документ HTML в идентичный PDF. Именно тому, как им пользоваться, и будет посвящена эта статья.
Итак, прежде всего, для того чтобы воспользоваться этим классом, вы скачиваете архив в конце статьи.
Далее загружаете файлы к себе на сервер и осуществляете подключение скрипта в вашем PHP-файле:
require_once("dompdf/dompdf_config.inc.php");
Отлично, теперь для примера добавим некий HTML-документ:
$html = <<<HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test Page</title>
</head>
<body>
<p>Привет, <span style="color: green">Мир</span>!</p>
</body>
</html>
HTML;
Здесь мы указываем документ непосредственно в теле скрипта, но также вы можете заменить всю строку, например, на:
$html = file_get_contents("LINK");
Где «LINK» – ссылка на HTML-страницу, которую нужно конвертировать.
Ну и финальные штрихи – это добавить соответствующие теги класса:
$dompdf = new DOMPDF(); // Создаем обьект
$dompdf->load_html($html); // Загружаем в него наш HTML-код
$dompdf->render(); // Конвертируем HTML в PDF
$dompdf->stream("new_file.pdf"); // Выводим результат на скачивание
И общая картина получается такая:
<?php
header("Content-Type: text/html; charset=utf-8");
require_once("dompdf/dompdf_config.inc.php");
$html = <<<HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test Page</title>
</head>
<body>
<p>Привет, <span style="color: green">Мир</span>!</p>
</body>
</html>
HTML;
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("new_file.pdf");
?>
Если вы не хотите, чтобы при посещении скрипта происходило скачивание полученного PDF-файла, а хотите поместить данные в переменную для дальнейшего использования, то строку:
$dompdf->stream("new_file.pdf");
замените на:
$new_file = $dompdf->output(0);
Еще один важный момент: если ссылки на изображения прописаны не относительные, а абсолютные (то есть не «/logo.png», а «https://your_site.com/logo.png»), то в таком случае откройте файл dompdf_config.inc.php в папке /dompdf/ и строку:
def("DOMPDF_ENABLE_REMOTE", false);
замените на:
def("DOMPDF_ENABLE_REMOTE", true);
Вот, собственно, и все. Очень важный момент: если вы получаете ошибку при конвертировании, то всего скорее, вы используете новые свойства стилей (как было у меня), в таком случае – просто постарайтесь оптимизировать (упростить) свой код.