Php формирование pdf документа

Php формирование pdf документа

С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf – это конвертер HTML в PDF который поддерживает CSS, атрибуты style и другие.

  • Поддерживает большинство свойств CSS 2.1.
  • Поддерживает сложные таблицы, включая индивидуальный стили ячеек.
  • Поддержка изображений gif, png с прозрачностью, bmp и jpeg.
  • PHP => 5.3 с установленными расширениями DOM, GD, MBString, php-font-lib, php-svg-lib.

Проект на GitHub.
Класс с установленным кириллическим шрифтом Arial – dompdf.zip

Для примера сделаем счет на оплату:

Для удобства сформируем массив товаров по которому скрипт выведет таблицу и посчитает итоговую сумму и НДС.

Также понадобятся функции для форматирования цен и вывода суммы прописью.

Далее нужно сверстать счет в обычном HTML с CSS.

Некоторые замечания:

  • Адреса картинок в должны быть указаны относительно сервера.
  • У таблиц не получится задать ширину колонок тегом .

Управление форматом и содержимым PDF-файлов при помощи PHP

Иногда возникает необходимость управлять подготовкой страниц к выводу на печать. В этой ситуации HTML не является лучшим выбором. PDF-файлы предоставляют полный контроль над визуализацией текста и графическими изображениями на странице. К сожалению, API для создания PDF-файлов не входит в стандартный инструментарий PHP. Мы поможем решить эту проблему.

Часто используемые сокращения
  • API: Application Programming Interface (прикладной интерфейс программирования)
  • DOM: Document Object Model (объектная модель документа)
  • HTML: Hypertext Markup Language (язык разметки гипертекста)
  • PDF: Portable Document Format (переносимый формат документов)
  • W3C: World Wide Web Consortium (консорциум WWW)
  • XML: Extensible Markup Language (расширяемый язык разметки)

Первым, что вы найдете в Интернете при поиске поддержки PDF для PHP, будет, скорее всего, коммерческая библиотека PDFLib и ее версия с открытыми исходными кодами PDFLib-Lite. Это хорошие библиотеки, но коммерческая версия стоит довольно дорого. Облегченная версия распространяется только в исходных кодах, и это ограничение может оказаться проблемой при попытке установить ее в рабочей среде.

Еще одним вариантом является библиотека Free PDF (FPDF), встроенная в PHP. Она не требует компиляции и совершенно бесплатна, поэтому не создает водяных знаков, как нелицензированная версия PDFLib. Именно библиотеку Free PDF я использую в данной статье.

Для демонстрации динамического создания PDF-файлов мы будем использовать итоговую таблицу женских соревнований по роликовым конькам. Эта таблица была извлечена из Интернета и преобразована в XML. В листинге 1 приведен пример XML-файла с данными.

Читайте также:  Как копировать текст в ноутбуке без мышки
Листинг 1. XML-данные

Корневым элементом XML является тег events . Данные сгруппированы по событиям, где каждое событие содержит несколько матчей. В теге events содержится ряд тегов event , в которых, в свою очередь, находятся несколько тегов game . Теги game содержат названия двух команд-участниц и счет матча.

В листинге 2 приведен PHP-код для чтения этого XML.

Листинг 2. getresults.php

Этот сценарий реализует функцию getResults , которая считывает XML-файл в DOMDocument. Затем с помощью вызовов DOM выполняется обход всех тегов event и game с созданием массива событий. Внутри каждого элемента массива содержится хеш-таблица с названием события и массивом состоявшихся матчей. Эта структура, по существу, является хранимой в памяти версией структуры XML.

Для тестирования работы данного сценария мы создадим HTML-страницу экспорта, использующую функцию getResults для чтения файла, а затем выведем данные как серию HTML-таблиц. В листинге 3 приведен PHP-код для такого тестирования.

Листинг 3. HTML-страница результатов

Используя код getresults.php и XML-файл данных, загруженный на Web-сервер, можно увидеть результат в формате HTML, изображенный на рисунке 1.

Рисунок 1. Результат соревнований в HTML-формате

Здесь даже используется жирный шрифт для выделения победившей команды, чтобы показать, какая команда какой матч выиграла.

Создание PDF

Теперь, имея данные, можно перейти к созданию PDF-файлов. Первый шаг – загрузка библиотеки FPDF и установка ее в том каталоге, где находится набор файлов приложения. На самом деле эту библиотеку можно установить в любом месте, если указать ее местоположение в переменной PHP library path. Запомните местоположение каталога font, поскольку нам понадобится установить ‘FPDF_FONTPATH’ , как показано в листинге 4.

Листинг 4. Hello World в PDF-формате

Этот сценарий выводит строку Hello World в PDF-формате. Прежде всего сценарий устанавливает местоположение каталога font FPDF, используя оператор define. Затем он определяет библиотеку FPDF, используя оператор require. Далее сценарий создает FPDF-объект, устанавливает шрифт, помещает заданный текст на страницу, используя метод Cell, и выводит ее в PDF-формате.

На рисунке 2 показан результат при правильной работе сценария.

Рисунок 2. Hello World в PDF-формате

Если PDF не выводится, придется, возможно, запустить сценарий из командной строки, чтобы увидеть сообщение об отсутствии файла fpdf.php или о возникновении каких-либо других проблем.

Читайте также:  Как удалить realtek hd на windows 10

После настройки PDF-визуализации можно объединить приложение с файлом результатов соревнований и посмотреть, что можно сгенерировать динамически. В листинге 5 приведена первая версия такого объединения.

Листинг 5. Первая версия отображения результатов в PDF-формате

Вместо того чтобы использовать FPDF-класс извне, мы расширяем его собственным подклассом. В этом подклассе мы создаем новый метод под названием EventTable, который создает таблицу результатов для данного события. Начнем с малого и просто выведем имя события. Это имя выводится в расположенном в конце сценария цикле foreach, который добавляет страницу для каждого события, а затем активизирует метод EventTable .

Результаты работы сценария показаны на рисунке 3.

Рисунок 3. Первая версия динамического PDF

При прокрутке страниц видно, что каждое событие располагается на своей собственной странице. Следующий шаг – добавление результатов на страницу.

Создание таблицы результатов

В PDF-файлах нет такой простой табличной структуры, как в HTML. Для построения таблицы необходимо создать набор ячеек, имеющих различную ширину, шрифт, цвет фона, цвет линий и т.д.

В листинге 6 приведен дополнительный код, настраивающий строку заголовка для таблицы.

Листинг 6. Добавление заголовка таблицы результатов

Этот дополнительный код настраивает шрифт, цвета и толщину линий. Затем он визуализирует несколько ячеек, содержащих заголовки четырех столбцов. Далее вызывается метод Ln , выполняющий возврат каретки для перехода на новую строку.

Результат выполнения данного сценария в браузере показан на рисунке 4.

Рисунок 4. Страница со строкой заголовков столбцов таблицы

На рисунке 4 заголовки отображаются в виде белого текста на сером фоне. Такой формат выделит их из данных, которые будут отображаться под заголовками. Для визуализации результатов соревнований добавьте код, приведенный в листинге 7.

Листинг 7. Добавление заполненной таблицы результатов

В дополнение к выводу строки заголовков у нас есть цикл foreach в методе EventTable , который выполняет итерирование по всем матчам. На рисунке 5 показан код реализации.

Рисунок 5. PDF с таблицей результатов

Переменная $fill чередует цвета фона строк таблицы. Названия и результаты выигравших команд отображаются жирным курсивом. Также отмечу, что шрифт меняется с Arial для заголовков на Times для содержимого матчей.

Читайте также:  Как установить смарт часы на андроид

Чтобы завершить код примера, нужно добавить немного графики.

Добавление графики

Добавить графику в PDF очень просто. Для начала найдите какое-либо изображение в Интернете. Я взял логотип одной из команд и сохранил его в формате PNG. Затем я применил новый код, приведенный в листинге 8.

Листинг 8. Добавление изображения логотипа

Основным в листинге 8 является метод Image , который принимает название файла с изображением, его местоположение и ширину. Все дополнительные параметры необязательны, поэтому указываем столько информации, сколько хотим.

Несколько новых вызовов SetXY перемещают текст и таблицу в подходящее место, чтобы они не перекрывали изображение.

На рисунке 6 показан результат работы данного сценария.

Рисунок 6. Готовый PDF с логотипами

Используя другие методы, предоставляемые библиотекой визуализации графики, можно полностью контролировать содержимое PDF-файлов, добавляя плавающий текст и гиперссылки и управляя схемой страницы, например, отступами и ориентацией.

Заключение

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

Ресурсы для скачивания

Похожие темы

  • Оригинал статьи: Build PDF files dynamically with PHP (EN).
  • W3C: отличный сайт по стандартам, в частности, по стандартам XML, имеющим отношение к данной статье.
  • Сайт PHP: лучшая справочная информация по PHP.
  • PDFLib: коммерческая библиотека для создания PDF-файлов.
  • PDFLib-Lite: загрузите версию библиотеки с открытыми исходными кодами PDFLib 7 и исследуйте ее функциональные возможности.
  • Пакет PECL: загрузите расширение, содержащее библиотеку программирования PDFLib, для обработки PDF-файлов на лету.
  • FPDF: загрузите библиотеку, при помощи которой создавались PDF-файлы данной статьи.
  • Другие статьи автора (Джек Херрингтон (Jack Herrington), developerWorks, с марта 2005 года по настоящее время): статьи об Ajax, JSON, PHP, XML и других технологиях (EN).
  • Сертификация IBM XML: информация о получении сертификата IBM-Certified Developer по XML и смежным технологиям.
  • Ознакомительные версии продуктов IBM. Загрузите ознакомительные версии продуктов IBM или исследуйте в IBM SOA Sandbox интерактивные ознакомительные версии, чтобы освоить инструменты разработки приложений и продукты промежуточного уровня семейств DB2®, Lotus®, Rational®, Tivoli® и WebSphere®.

Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

Ссылка на основную публикацию
Php определить длину строки
(PHP 3, PHP 4, PHP 5) strlen -- Возвращает длину строки Описание int strlen ( string string ) Возвращает длину...
Https ok ru dk cmd logexternal
Социальная сеть «Одноклассники» — найди друзей Одноклассники – социальная сеть, которая пользуется большой популярностью среди тех, кто хочет отыскать друзей...
Huawei e160g прошивка под всех операторов
Прошивка и разблокировка брендированных модемов/телефонов/роутеров/планшетов Мы ВКонтакте Наш канал Голосование Последние посетители ziko01201[ 16 мин, 54 сек назад ] tentser[...
Php формирование pdf документа
С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf – это конвертер HTML в PDF который поддерживает...
Adblock detector