Как сделать pdf html
Конвертируем HTML в PDF при помощи Dompdf
PDF — формат, ставший уже стандартом. Он был изначально создан Adobe для представления текста и изображений в документе с фиксированной структурой. Давно не редкость для веб-приложений, поддерживающих скачку данных, таких как счета или отчеты, отдавать их в PDF формате. Так что в этой статье мы пройдем простую генерацию PDF документов используя PHP.
Dompdf — это отличная библиотека, способная генерировать PDF из HTML-разметки и CSS-стилей (в большинстве случаев это стили, совместимые с CSS 2.1 с поддержкой некоторых свойств CSS3). Мы можем определить, как наше содержимое должно выглядеть, используя эти знакомые технологии, и после легко конвертировать его в фиксированный документ. Также эта библиотека имеет и другие полезные и интересные функции.
Приступаем к работе
Dompdf доступен на GitHub и может быть установлен используя Composer. Установка через Composer без каких-либо ошибок часто вызывает трудности, поэтому я рекомендую просто использовать Git для установки Dompdf.
Библиотека требует PHP >= 5.0 с активированными расширениями mbstring и DOM. Также она требует несколько шрифтов, которые обычно доступны на большинстве компьютеров.
Перейдите в директорию, куда собираетесь установить библиотеку и выполните в командной строке:
Как только мы скачали Dompdf, давайте напишем короткий пример, который сгенерирует простой PDF документ:
Для того, чтобы использовать библиотеку в проекте, мы сначала подтягиваем файл dompdf_config.inc.php, который содержит большую часть конфигурации Dompdf. Он также загружает autoloader и пользовательский файл конфигурации в котором мы можем переопределить параметры по умолчанию.
HTML-разметка передается как строка в метод load_html(). Альтернативно мы можем загрузить разметку из файла или URL, используя метод load_html_file(). Он принимает имя файла или URL веб-страницы в качестве аргумента.
Метод render() отображает HTML в PDF, и мы готовы к отдаче файла. Метод stream() отправляет результирующий PDF как вложение в браузер. Этот метод имеет необязательный второй параметр, массив опций:
Только что мы сгенерировали очень простой PDF, но это не совсем практично. В реальности мы часто имеем требования к размеру листа, ориентации страницы, кодировке символов и т.д. Есть целый набор опций, которые мы можем установить, чтобы сделать Dompdf более подходящим для наших реальных потребностей. Все они перечислены и объяснены в файле dompdf_config.inc.php, который устанавливает им значения по умолчанию. Вы можете менять эти значения, обновляя файл пользовательской конфигурации dompdf_config.custom.inc.php. Вот некоторые из важных настроек:
Продвинутое использование
Теперь давайте немного поговорим о продвинутом использовании Dompdf. Возможно мы хотим сохранить сгенерированный PDF документ на диск, вместо того чтобы отсылать его в браузер. Вот как это делается:
Вместо вызова stream(), как в прошлом примере, мы используем output(), который возвращает PDF как строку. Этот метод также принимает массив опций, но доступна лишь одна — compress (по умолчанию true).
Dompdf также позволяет нам добавлять хедер и футер к сгенерированному PDF, встраивая PHP-скрипт прямо в HTML, который он отображает. Но из-за того, что обработка произвольного кода может представлять из себя угрозу безопасности, значение конфигурации, которое отвечает за эту функциональность, по умолчанию выключено. Нам необходимо для начала установить опцию DOMPDF_ENABLE_PHP как true.
Как только мы включили выполнение встроенного PHP, объект PDF станет доступным внутри скрипта и мы сможем использовать его для манипуляций со страницей. Мы можем добавлять текст, линии, изображения, прямоугольники и т.д.
Скрипт встроен прямо в HTML-разметку и сначала открывает объект, чтобы мы могли влиять на отображение. Вся отрисовка будет записана в этот объект и мы сможем добавить его на все выделенные страницы (хотя есть и ограничения).
Затем мы получаем реальную ширину и высоту страницы, чтобы посчитать координаты футера, который мы собираемся добавить. Также нам требуется предоставить обьект шрифта, поскольку мы добавляем текстовое содержимое. Font_Metrics::get_font() позволяет создать объект, который нам необходим. Мы также берем высоту данного шрифта из его размера используя get_font_height(), чтобы посчитать позиционирование содержимого футера. Метод get_font_width() возвращает ширину нашего текста для данного шрифта и размера, которую мы также используем в наших вычислениях.
Метод line() рисует линию из точки (X1,Y1) в точку (X2,Y2). Обратите внимание, значение цвета подставляется не совсем в RGB. Основной PDF-класс требует значения между 0 и 1, так что мы конвертируем значения RGB в эти новые значения. Чтобы получить лучшее приближение (approximation), вы можете поделить их на 255.
Мы добавляем номер для каждой страницы, используя метод page_text(), которой принимает координаты X и Y, а также текст, который будет добавлен, объект шрифта, размер шрифта и цвет. Dompdf автоматически заменяет значения для и на каждой странице, и делает $pdf доступным для нас.
Также мы можем не использовать встроенный PHP и достигать аналогичного эффекта прямо из PHP, примерно так:
Обратите внимание, мы размещаем код после вызова $dompdf->render() потому что мы, по существу, редактируем уже созданный PDF.
Подведем итоги
В этой статье мы обсудили простой способ конвертировать HTML в PDF используя Dompdf. Несмотря на то, что Dompdf отличная библиотека, она не является полностью универсальным решением для генерации PDF документов; она все же имеет определенные ограничения и проблемы. Dompdf не очень терпимо относится к плохо оформленному HTML и большие таблицы могут легко привести к переполнению памяти. Некоторые базовые функции CSS, такие как float не полностью поддерживаются. И вообще, поддержка CSS3 очень ограничена. Если вам необходимы функции, которые не поддерживаются в Dompdf, вам может помочь к примеру wkhtmltopdf. Тем не менее, Dompdf является очень простым и удобным инструментом для решения большинства задач по экспорту PDF.
На самом деле довольно трудно объяснить все функции библиотеки в статье вроде этой, поэтому не забудьте просмотреть документацию и исходный код, а также изучите такие полезные функции, как добавление колбэков, использование своих шрифтов и др.
Преобразование веб-страниц в PDF
Ядром веб-страницы является файл, написанный на языке разметки гипертекста (HTML). Обычно HTML-файл включает связи с другими файлами, которые либо отображаются на веб-странице, либо определяют внешний вид или работу страницы.
Конечный файл PDF действует аналогично исходной веб-странице. Например, изображения, ссылки, карты изображений и большинство файлов мультимедиа отображаются и работают обычным образом в PDF (Анимированные файлы в формате GIF отображаются в виде неподвижных изображений, показывая последний кадр анимации.)
Такой файл PDF функционирует как любой другой файл PDF. Например, можно перемещаться по файлу при помощи прокрутки или закладок; пользователи могут добавлять комментарии; можно добавить функции защиты, поля формы и иные функции, которые расширяют работу с файлом.
При подготовке к преобразованию веб-страниц в PDF, учитывайте следующие рекомендации, которые влияет на ваш подход к процессу преобразования.
Какой объем необходимо преобразовать?
Необходимо создать новый файл PDF из веб-страниц или добавить преобразованные страницы к существующему файлу PDF?
Для преобразования веб-страниц на китайском, японском и корейском языках (CJK) в PDF на Западноевропейской системе в Windows при установке Acrobat необходимо установить файлы поддержки языков CJK. Также лучше выбирать соответствующую кодировку из параметров преобразования HTML.
Преобразование веб-страниц в PDF в Internet Explorer, Google Chrome и Firefox (Windows)
Acrobat устанавливает панель инструментов Adobe PDF в браузере Internet Explorer (версия 8.0 или более поздняя), Google Chrome и Firefox. Используя команды на этой панели инструментов, вы можете преобразовать отображаемую веб-страницу в PDF различными способами. Например, вы можете преобразовать всю веб-страницу или только ее выделенные области. Также вы можете создать документ PDF или добавить преобразованную веб-страницу к существующему файлу PDF. Меню панели инструментов также содержит команды, с которых начинаются дальнейшие действия после преобразования, например присоединение созданного файла PDF к новому сообщению электронной почты или его печать.