Мастер PHP | Конвертировать HTML в PDF с Dompdf

  1. Начиная
  2. Расширенное использование
  3. Заключение

PDF - это стандартный формат, изначально созданный Adobe для представления текста и изображений в документе с фиксированным макетом. Веб-приложение нередко поддерживает загрузку данных, таких как счета-фактуры или отчеты, в формате PDF, поэтому в этой статье мы рассмотрим, как легко создавать PDF-документы с использованием PHP.

Dompdf - отличная библиотека, способная генерировать PDF из разметки HTML и стилей CSS (в основном она совместима с CSS 2.1 и поддерживает некоторые свойства CSS3). Мы можем решить, как должен выглядеть наш контент, используя эти знакомые технологии, а затем легко преобразовать его в фиксированный документ. В библиотеке также есть много других полезных и интересных функций.

Начиная

Dompdf доступен на GitHub и может быть установлен с помощью Composer. Правильная установка и запуск на основе Composer по-прежнему немного сложнее, поэтому я рекомендую просто использовать Git для установки Dompdf.

Для библиотеки требуется PHP> = 5.0 с включенными расширениями mbstring и DOM. Также нужны шрифты, которые обычно доступны на большинстве машин.

Перейдите туда, куда вы хотите поместить библиотеку и выполните:

git clone https://github.com/dompdf/dompdf.git git submodule init git обновление подмодуля

Загрузив Dompdf, напишем короткий пример, который сгенерирует простой PDF.

&lt;? php set_include_path (get_include_path (). PATH_SEPARATOR. "/ path / to / dompdf"); require_once "dompdf_config.inc.php"; $ dompdf = новый DOMPDF (); $ html = <<< 'ENDHTML' <html> <body> <h1> Hello Dompdf </ h1> </ body> </ html> ENDHTML; $ Dompdf-> load_html ($ HTML); $ Dompdf-> Render (); $ Dompdf-> поток ( "hello.pdf");

Чтобы использовать библиотеку в проекте, мы сначала извлекаем dompdf_config.inc.php, который содержит большую часть конфигурации Dompdf. Он также загружает автозагрузчик и пользовательский файл конфигурации, в котором мы можем переопределить параметры конфигурации по умолчанию.

HTML-разметка задается в виде строки для метода load_html (). В качестве альтернативы, мы можем загрузить разметку из файла или URL-адреса, используя метод load_html_file (). Он принимает имя файла или URL веб-страницы в качестве аргумента.

Метод render () рендерит HTML в PDF, и мы готовы выгрузить файл PDF. stream () отправляет полученный PDF-файл в виде вложения в браузер. Метод stream () имеет необязательный второй параметр, массив опций:

  • Accept-Ranges - логическое значение, отправлять заголовок «Accept-Ranges» (по умолчанию false).
  • Attachment - логическое значение, отправьте заголовок «Content-Disposition: attachment», заставляющий браузер отображать приглашение сохранения (по умолчанию true).
  • compress - boolean, включить сжатие содержимого (по умолчанию true).

Мы создали очень простой PDF здесь, но это не очень практично. В действительности мы часто предъявляем требования к размеру бумаги, ориентации страницы, кодировке символов и т. Д. Существует ряд опций конфигурации, которые мы можем установить, чтобы сделать Dompdf более подходящим для наших реальных потребностей. Все они перечислены и объяснены в dompdf_config.inc.php, который устанавливает их значения по умолчанию. Вы можете изменить эти значения, обновив файл пользовательской конфигурации dompdf_config.custom.inc.php. Некоторые из важных настроек:

  • DOMPDF_DEFAULT_PAPER_SIZE - устанавливает размер бумаги по умолчанию для документа PDF. Поддерживаемые размеры бумаги можно найти в include / cpdf_adapter.cls.php (значение по умолчанию «буква»).
  • DOMPDF_TEMP_DIR - указывает временный каталог, используемый Dompdf. Убедитесь, что это местоположение доступно для записи учетной записи веб-сервера.
  • DOMPDF_UNICODE_ENABLED - устанавливает, использует ли PDF шрифты Unicode (по умолчанию установлено значение true).
  • DOMPDF_ENABLE_REMOTE - включает включение изображений или стилей CSS с удаленных сайтов (по умолчанию false).
  • DEBUG_LAYOUT - отображать ли рамку вокруг каждого блока HTML в файле PDF, что полезно для отладки макета (по умолчанию false).

Расширенное использование

Теперь давайте поговорим о некоторых передовых применениях Dompdf. Возможно, мы хотим сохранить сгенерированный PDF-документ на диск, а не отправлять его в браузер. Вот как:

&lt;? php $ dompdf = new DOMPDF (); $ Dompdf-> load_html ($ HTML); $ Dompdf-> Render (); $ output = $ dompdf-> output (); file_put_contents ("/ path / to / file.pdf", $ output);

Вместо вызова stream (), как в предыдущем примере, мы используем output (), который возвращает PDF в виде строки. Он также принимает необязательный массив опций, но единственная доступная опция - это сжатие (по умолчанию - true).

Dompdf также позволяет нам добавлять верхний или нижний колонтитул к сгенерированному PDF, встраивая скрипт PHP в HTML, который он отображает. Но поскольку обработка произвольного кода может представлять угрозу безопасности, если вы не будете осторожны, значение конфигурации, управляющее этой функцией, по умолчанию отключено. Сначала нам нужно установить для параметра DOMPDF_ENABLE_PHP значение true.

Как только мы включили встроенное выполнение PHP, объект PDF станет доступным в скрипте, который мы можем использовать для управления страницей. Мы можем добавлять текст, линии, изображения, прямоугольники и т. Д. В любом месте на странице.

$ html = <<< 'ENDHTML' <html> <body> <script type = "text / php"> if (isset ($ pdf)) {// открыть объект PDF - все команды рисования // теперь перейдут в объект вместо текущей страницы $ footer = $ pdf-> open_object (); // получаем высоту и ширину страницы $ w = $ pdf-> get_width (); $ h = $ pdf-> get_height (); // get font $ font = Font_Metrics :: get_font ("helvetica", "normal"); $ txtHeight = Font_Metrics :: get_font_height ($ font, 8); // рисуем линию вдоль дна $ y = $ h - 2 * $ txtHeight - 24; $ color = array (0, 0, 0); $ pdf-> line (16, $ y, $ w - 16, $ y, $ color, 1); // установить номер страницы слева $ pdf-> page_text (16, $ y, "Page: {PAGE_NUM} of {PAGE_COUNT}", $ font, 8, $ color); // установить дополнительный текст $ text = "Dompdf потрясающий"; $ width = Font_Metrics :: get_text_width ($ text, $ font, 8); $ pdf-> text ($ w - $ width - 16, $ y, $ text, $ font, 8); // закрыть объект (остановить захват) $ pdf-> close_object (); // добавить объект на каждую страницу (также можно указать // "нечетный" или "четный") $ pdf-> add_object ($ footer, "all"); } </ script> <h1> Hello Dompdf </ h1> </ body> </ html> ENDHTML;

Сценарий внедряется непосредственно в разметку HTML и сначала открывает объект, чтобы мы могли повлиять на рендеринг. Весь рисунок будет записан в этот объект, и мы можем добавить этот объект ко всем или выбранным страницам (хотя есть ограничения).

Затем мы выбираем фактическую ширину и высоту страницы, чтобы вычислить координаты нижнего колонтитула, который мы намереваемся добавить. Также нам нужно предоставить объект шрифта, пока мы добавляем текстовое содержимое. Font_Metrics :: get_font () позволяет нам создать нужный нам объект. Мы также берем высоту данного шрифта по размеру шрифта, используя get_font_height (), чтобы вычислить позиционирование содержимого нижнего колонтитула. Метод get_font_width () возвращает ширину нашего текста для данного шрифта и размер шрифта, который также используется в наших вычислениях.

Метод line () рисует линию от точки (X1, Y1) до (X2, X2). Обратите внимание, что предоставленное нами значение цвета не является фактическим значением RGB. Базовый класс PDF требует значений от 0 до 1, поэтому мы конвертируем значения RGB в эти новые значения. Чтобы получить лучшее приближение, вы можете разделить его на 255.

Мы добавляем номер страницы для каждой страницы, используя метод page_text (), который принимает позицию X и Y, текст, который нужно добавить, объект шрифта, размер шрифта и цвет. Dompdf автоматически заменяет значения {PAGE_NUM} и {PAGE_COUNT} на каждой странице и делает доступным для нас $ pdf.

Когда рендеринг PDF, нижний колонтитул будет выглядеть так:

Можно избежать использования встроенного PHP и добиться того же эффекта непосредственно из PHP, например, так:

&lt;? php $ dompdf = new DOMPDF (); $ Dompdf-> set_paper ( "A4"); // загрузить html-контент $ dompdf-> load_html ($ html); $ Dompdf-> Render (); $ canvas = $ dompdf-> get_canvas (); $ font = Font_Metrics :: get_font ("helvetica", "bold"); $ canvas-> page_text (16, 800, «Страница: {PAGE_NUM} из {PAGE_COUNT}», $ font, 8, массив (0,0,0)); $ Dompdf-> поток ( "sample.pdf", массив ( "Приложение" => 0));

Обратите внимание, что мы помещаем код после вызова $ dompdf-> render (), потому что мы по сути модифицируем отрендеренный PDF.

Заключение

В этой статье мы обсудили, как легко конвертировать HTML в PDF, используя Dompdf. Хотя Dompdf - отличная библиотека, она не является пуленепробиваемым решением для создания PDF-документов; это имеет некоторые ограничения и проблемы. Dompdf на самом деле не терпит плохо сформированный HTML, и большие таблицы могут легко привести к нехватке памяти. Некоторые базовые функции CSS, такие как float, поддерживаются не полностью, а поддержка CSS3 ограничена. Если вам нужны функции, которые не поддерживаются Dompdf, то, возможно, вам подойдет что-то вроде wkhtmltopdf. Тем не менее, Dompdf довольно прост и подходит для большинства потребностей экспорта PDF.

Действительно сложно объяснить все функции, предоставляемые библиотекой, в статье, подобной этой, поэтому обязательно ознакомьтесь с документацией и исходным кодом, а также узнайте о интересных функциях, таких как добавление обратных вызовов, использование пользовательских шрифтов и т. Д. Я рад помочь вам в рамках моего ограниченного опыта. Не стесняйтесь оставлять свои вопросы и делиться своим опытом в разделе комментариев.

Изображение через Fotolia

И если вам понравилось читать этот пост, вам понравится Обучающийся ; место, чтобы узнать новые навыки и приемы у мастеров. Участники получают мгновенный доступ ко всем электронным книгам и интерактивным онлайн-курсам SitePoint, таким как Jump Start PHP ,

Комментарии к этой статье закрыты. Есть вопрос по PHP? Почему бы не спросить это на нашем форумы ?

Похожие

Лучший HTML в PDF PHP API
Скачать и запустить легко PDF Action Center , Выберите PHP в качестве языка. Выберите HTML в качестве исходного типа файла. Выберите функции, которые вы хотите в вашем PDF.
Мастер PHP | Генерация QR-кодов в PHP
QR-коды, широко используемые в недавних приложениях, можно увидеть на банках с колой, визитных карточках, в суши-барах и в музеях. QR Code - это двухмерная спецификация штрих-кода, которая была изобретена в Японии. Запатентовано. но его изобретатель, Денсо Вейв, решил не использовать его и оставил стандарт открытым для пользы всех. С тех пор популярность кода возросла из-за его способности включать много данных в одно изображение и распространения смартфонов со сканирующими приложениями.
Использование агрегатных и родительских POM
... использование родительских и агрегатных POM, а также некоторые параметры сборки, предоставляемые специалист сделать создание крупных проектов с Maven довольно легко"> В этой статье мы обсудим использование родительских и агрегатных POM, а также некоторые параметры сборки, предоставляемые специалист сделать создание крупных проектов с Maven довольно легко. Мы также хотим подчеркнуть понятие цикла выпуска и последствий для управления
Значения отображения CSS по умолчанию для различных элементов HTML
Каждый элемент в документе HTML принимает значение для свойства отображения CSS. Возможные значения, которые вы можете использовать для отображения много , Три наиболее часто используемых значения: none, block и inline. Но что, если вы не определите отображаемое значение для элемента? Ну, все элементы имеют начальное состояние или состояние по умолчанию для их отображаемого значения. Давайте рассмотрим некоторые из них и увидим некоторые
Как конвертировать и открыть файл Apple Pages в Word на ПК с Windows
Если вы используете ПК Mac и Windows одновременно, вам может потребоваться открыть файлы .pages на ПК с Windows. «Страницы» - это встроенный считыватель документов в Apple Mac OS. Поскольку файлы .pages не поддерживаются в Windows, вы не можете открыть их с помощью Microsoft Word. Другими словами, если вы хотите показать или отредактировать файл .pages на ПК с Windows, вы получите сообщение об ошибке, и Windows попросит вас выбрать приложение. Если вы хотите решить эту проблему и открыть
Обзор Samsung Galaxy Tab S 10.5: тонкий, легкий и очень впечатляющий
Samsung предлагает то, что может показаться ошеломляющим набором планшетов, включая стандартную Galaxy Tab, ориентированную на бизнес Galaxy Tab PRO и оснащенные стилусом линейки Galaxy Note. Теперь есть еще одна линейка - Galaxy Tab S, который доступен в размерах 8,4 и 10,5 дюймов, а также в вариантах с поддержкой Wi-Fi и Wi-Fi-Plus-LTE. 10,5-дюймовый Galaxy Tab S рассмотренный здесь предоставляет широкий набор функций
5 приложений для Android, которые меняют обои в соответствии с погодой
Вы можете посмотреть в окно, чтобы увидеть, какая погода, но слишком рано утром, и все, что вы можете видеть, это темнота. Вы находитесь в середине полной аудитории, и вам интересно, какая погода будет на улице, когда игра закончится. Вы так долго ждали метро, ​​что действительно не знаете, как выглядит небо. В любом из этих сценариев вы могли бы извлечь свой смартфон и найти эту информацию, но это было бы быстрее, если бы вам не пришлось. Вот пять приложений для Android, которые будут менять
Почему Intel строит процессоры ARM и кому это выгодно?
В конце октября произошло немыслимое. Intel сообщила, что собирается собирать процессоры ARM. Последовало много визга, криков и хвастовства, во главе со статьей Forbes, в которой говорится, что развитие «вызвало шок в технологической индустрии». Это, несомненно, немного преувеличено, хотя бы потому, что масштаб производства, на который согласился Intel, довольно мал.
Самый простой способ отправить PDF-файлы на ваш iPad
PDF широко используется во многих отраслях благодаря тому, что документы в этом формате удобны для чтения и редактирования. Многие компании сохраняют и передают файлы в формате PDF не только потому, что документ выглядит так же, как при печати, но и потому, что его можно
Оптимизировать время загрузки страницы
Почему важна оптимизация страницы? Требуется ли оптимизация вашего сайта, как это сделать и устранить потенциальные проблемы? Почему оптимизация важна? Время загрузки сайта является одним из наиболее важных элементов пользовательского опыта, а также одним из факторов, когда речь заходит о SEO. В настоящее время у пользователей нет терпения ждать долгой загрузки страницы. Более 40% пользователей покидают сайт, если он загружается 3 секунды или более (
WD My Cloud Review (модель 2 ТБ)
WD My Cloud - это то, чего вы ждали, думая о собственном личном облаке. My Cloud, помеченный как «Сохранить все и получить доступ куда угодно», доступен в размере 2, 3 и 4 ТБ. В качестве конфигурации с одним диском My Cloud ориентирован в основном на домашних пользователей, и цена на него соответственно. Например, модель, протестированная в этом обзоре, построена на 2-ТБ жестком диске WD красного цвета. Сам диск стоит
Lt;?
Есть вопрос по PHP?
Но что, если вы не определите отображаемое значение для элемента?
Требуется ли оптимизация вашего сайта, как это сделать и устранить потенциальные проблемы?
Почему оптимизация важна?

Добро пожаловать , Гость !

Мы настоятельно рекомендуем Вам зарегистрироваться, если вы ещё этого не сделали. регистрация откроет Вам новые функции.

Войти или Зарегистрироваться

www.silvio-berluskoni.ru © Все права защищены © 2016.