Конвертируем HTML в PDF

Формат PDF все больше набирает обороты. Выставление счета в интернет магазине, создание отчётов и презентаций — это далеко не весь список, где полным ходом используется документы в формате PDF. Но иногда, у web-мастеров, возникают проблемы при конвертации html в pdf.
Сегодня рассмотрим небольшой пример, как конвертировать код HTML в формат PDF.
На сегодня, в сети уже можно найти довольно много готовых классов для конвертации HTML в PDF. Все они имеют свои плюсы и недостатки.
В данном примере, мы будем использовать готовый класс domPDF.
Dompdf — класс написанный на PHP 5 для преобразования HTML в PDF.
Из плюсов Dompdf, стоит отметить:
- Окрытый исходный код
- Понимает большинство тегов html 4
- Поддержка css форматирования.
- Подерживает изображения (png, gif и jpeg)
- Отображает якорные и обычные ссылки
НО есть минус! Отсутствует поддержка кириллицы.
Решение проблемы описано ниже. Так что можно приступать.
Для начала, нам нужна сама библиотека.
Теперь подключаем библиотеку в наш скрипт:
require_once("dompdf/dompdf_config.inc.php");
Код html для примера будет самым простым:
$html = '<html><body>'. '<p>Put your html here, or generate it with your favourite '. 'templating system.</p>'. '</body></html>';
Вот и сам пример с комментариями:
$dompdf = new DOMPDF();// Создаем обьект $dompdf->load_html($html); // Загружаем в него наш html код $dompdf->render(); // Создаем из HTML PDF $dompdf->stream('mypdf.pdf'); // Выводим результат (скачивание)
Для загрузки html-кода из файла, необходимо считать его содержимое в переменную:
$html = file_get_contents('ПУТЬ_К_ФАЙЛУ');
Можно и не выводить файл для скачки, например, если нужно его сохранить или записать в переменную. Для этого нужно убрать метод stream и выполнить метод output c параметром 0:
$mypdf = $dompdf->output(0); // Запишет наш pdf файл в переменную строкой
А чтобы в наш pdf вставить изображение с абсолютным адресом, поменяйте в файле «dompdf/dompdf_config.inc.php» строчку
def("DOMPDF_ENABLE_REMOTE", false); // НА def("DOMPDF_ENABLE_REMOTE", true);
Теперь решим проблему с шрифтами в domPDF. Скачайте архив с шрифтами, распакуйте, и закиньте в папку lib с заменой. Проблема решена!
UPD Если проблемы с русским языком остались, то попробуйте явно указать тип кодировки:
$html = '<html><meta http-equiv="content-type" content="text/html; charset=utf-8" /><body>'. '<p>Теперь решим проблему с шрифтами в domPDF!</p>'. '</body></html>';
UPD2 Скачать рабочую версию можно по этой ссылке.
Более подробная документация Dompdf на GitHub:
Макс
17:04 08.05.2012Проблема с шрифтами не решена.
Сделал как написано и все равно белеберда.
кодировка utf-8.
что я делаю не так?
Максим Никифоров
20:00 08.05.2012Смотрите обновление статьи внизу. Будут вопросы, задавайте.