1. Главная страница » Компьютеры » Php сохранить в pdf

Php сохранить в pdf

Автор: | 16.12.2019

Содержание

Я использую выходной буфер PHP для создания HTML-файла динамической страницы «Просмотр данных», затем я сохраняю этот вывод в виде HTML-файла на сервере и хотел бы создать PDF-файл этого HTML-файла (хранится на сервер), но каждое решение, на которое я смотрел, требует, чтобы вы помещали HTML-код в переменную, но у меня есть файл .HTML, который я хочу автоматически преобразовать в PDF, но не могу найти решение.

Общая идея здесь состоит в том, чтобы предоставить пользователю «копию» обзора данных по электронной почте, поэтому я предположил, что лучше всего подойдет PDF, но если есть какие-то другие предложения, я с радостью рассмотрю что-то еще.

Любая помощь будет принята с благодарностью.

Решение

Я много думал о создании PDF-файлов в PHP, и вот что я нашел за несколько лет …

Инструменты PDF преобразования

Эта опция действительно хороша, если вы хотите сгенерировать файл PDF, используя Метод PDF (Я помечу это так, потому что вы буквально генерируете PDF по частям).

Особенности включают в себя:

  • Выбор единицы измерения, формата страницы и полей
  • Управление верхним и нижним колонтитулами страницы
  • Автоматический разрыв страницы
  • Автоматический разрыв строки и выравнивание текста
  • Поддержка изображений (JPEG, PNG и GIF)
  • Цвета
  • связи
  • TrueType, Type1 и поддержка кодировки
  • Сжатие страницы
  • Спектакль: Fast
  • Стоимость: Free
  • Простота использования: Difficult
  • Трудно использовать, если вы не играете с ним много.
  • Хорошая документация.
  • Другой:
    • Дублирование файлов (необходимо иметь HTML-версию страницы и FPDF-версию страницы, если вам нужно генерировать PDF-файлы)
    • MPDF
      • Этот вариант действительно хорош, если вы хотите сгенерировать PDF-файл из HTML и CSS и при этом иметь дополнительную и расширенную настройку PDF.
        • Особенности включают в себя:
          • Генерация PDF из кодировки UTF-8
          • Он основан на FPDF и HTML2FPDF с рядом улучшений
          • Мощный макет
          • Заголовки и колонтитулы
          • Номера страниц, двусторонняя печать
          • Таблицы, списки, столбцы, поплавки
          • Сноски, перекрестные ссылки
        • Веб Стандарты
          • HTML, XHTML, XML, SVG
          • Каскадные таблицы стилей (CSS)
          • JavaScript / ECMAScript
          • JPEG, PNG, GIF, TIFF
          • PDF вывод
            • Закладки, ссылки, метаданные
            • Шифрование и безопасность документов
            • Внедрение и подстановка шрифтов
            • PDF вложения
            • Простая интеграция
              • PHP и Ruby on Rails
              • Java-класс для сервлетов
              • .NET для C # и ASP
              • ActiveX / COM для VB6
              • шрифты & Unicode
                • OpenType шрифты, TrueType и CFF
                • Кернинг, лигатуры, маленькие шапки
                • Китайский, японский, корейский, арабский, иврит, хинди и другие
                • Дружеская поддержка
                  • Оперативная поддержка по электронной почте
                  • Веб-форум, руководство пользователя
                  • Регулярные обновления
                    • 1 лицензия — 3800 долларов
                    • 2 лицензии — 3420 долларов
                    • 3 лицензии — $ 3040
                    • 4 лицензии — $ 2850
                    • Лицензия 5+ — $ 2800

                    Этот вариант действительно хорош, если вы хотите API высокого качества. Это облачный вариант для создания файлов PDF и XLS. Использует PrinceXML в бэкэнде.

                    Особенности включают в себя:

                    • Вы просто отправляете HTML, JS и CSS
                    • Время работы гарантировано
                    • Неограниченный размер документа
                    • Экспертная поддержка, включая отладку документов
                    • Довольно много предлагает все, что делает PrinceXML, но дважды сверьтесь с их поддержкой или документацией для чего-то конкретного, что вам может потребоваться.
                    • На основе API: работает с PHP, NodeJS, Ruby, Python, Java, C #
                  • Заметки
                    • Спектакль: Fast
                      • Зависит от подключения к интернету, поэтому, если ваш интернет выходит из строя, то и эта часть вашего кода.
                      • Цены: $ — $$$
                        • В настоящее время их тарифные планы следующие (взяты из их Веб-сайт ):

                          • Базовая — 125 документов / мес. — 15 долл. / Мес.
                          • Профессиональный — 325 документов / мес. — 29 долл. / Мес.
                          • Премиум — 1250 документов / мес. — 75 долл. / Мес.
                          • Макс — 5000 документов / мес. — 149 долл. / Мес.
                          • Бронза — 15 000 документов / мес. — 399 долл. / Мес.
                          • Серебро — 40000 документов / мес. — 1000 долл. / Мес.
                          • Золото — 100 000 документов / мес. — 2250 долл. / Мес.
                          • Enterprise — ∞ docs / mo — нет в списке (свяжитесь с ними)
                            • [Использует] движок рендеринга Qt WebKit
                            • Создайте свой HTML-документ, который вы хотите превратить в PDF (или изображение). Запустите ваш HTML-документ через инструмент.

                            Другие опции

                            Мы имеем дело со многими продавцами. Некоторые поставщики отправляют нам PDF-файлы для своих счетов или других документов, в то время как другие отправляют нам электронные письма в формате HTML (со всей информацией о наших счетах), а некоторые другие даже отправляют нам ссылки на счета-фактуры.

                            Самый простой вариант — создать документ в HTML и отправить пользователям ссылку на этот документ (очевидно, защищенный). Это позволит пользователям просматривать счет-фактуру в любое время (и с любого устройства с браузером), а также позволит им печатать из браузера при необходимости. Этот метод также генерирует трафик на ваш сайт, что обычно также выгодно для бизнеса.

                            В прошлом мы делали ссылку на файл на веб-сайте (защищенную), чтобы они могли просматривать ее в браузере, а затем нажимали кнопку для загрузки счета (который просто загружает PDF-версию этой веб-страницы). генерируется с помощью одного из перечисленных выше инструментов преобразования PDF — в настоящее время это wkhtmltopdf).

                            На мой взгляд, лучшим способом было бы объединить все подходы к доставке в один. Отправьте электронное письмо с информацией о файле в его HTML-содержимом и вложите PDF-файл этого файла. Внутри заголовка части содержимого электронной почты (вверху сообщения) отправьте ссылку, дающую получателю прямой доступ к веб-странице, содержащей всю информацию (расположенную в его учетной записи на вашем защищенном портале). Это позволяет им просматривать его в браузере только в том случае, если они не могут просмотреть его должным образом в своей электронной почте, и в случае, если у них нет средства просмотра PDF (я знаю, что это редко, но вы удивитесь, сколько людей там есть устаревшие системы — нам все еще нужно отправлять факсы некоторым клиентам, потому что у них все еще нет электронных писем; да, все еще сейчас в 2017 году, вздох …). На вашем веб-сайте также предоставьте им ссылку для загрузки PDF-документа (которая снова просто возьмет страницу, на которой они находятся в данный момент, преобразует ее в PDF-файл и автоматически загружает ее через браузер).

                            В данном уроке показано, как использовать бесплатную библиотеку FPDF для генерации PDF документа из PHP скрипта.

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

                            Удобно иметь возможность создавать PDF документ из скрипта PHP. Например, вы можете сделать пользовательский отчет в формате PDF на основе установок посетителя и включить в него актуальные данные.

                            Читайте также:  Linux свободная оперативная память

                            В данном уроке мы создадим прекрасный 2-х страничный документ PDF с помощью PHP. Мы будем использовать библиотеку FPDF.

                            Вот что должно в конечном итоге получиться:

                            Установка FPDF

                            Для использования FPDF нужно установить его на сайт. Скачайте архив FPDF и распакуйте его в папку fpdf , которую надо создать в папке вашего сайта.

                            Начинаем писать скрипт PHP

                            Теперь у вас есть установленный FPDF и можно начать писать скрипт PHP для генерации отчета в формате PDF. Создаем файл report.php в той же папке, где вы создали папку fpdf и открываем его в текстовом редакторе.

                            Первое, что нужно сделать — включить библиотеку FPDF. Библиотека называется fpdf.php и располагается в папке fpdf :

                            Теперь добавим несколько переменных для конфигурации:

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

                            • Различные цвета, которые используются в отчете. Каждый цвет задается как массив из трех элементов, который содержит значения для красного, зеленого и голубого цветов (в диапазоне 0-255).
                            • Заголовок отчета ("2009 W >Создаем титульную страницу

                            Теперь можно приступить к построению PDF. Сначала создаем титульную страницу отчета. Оно содержит логотип компании и название отчета, расположенные по центру страницы.

                            Создаем объект FPDF

                            Сначала нужно создать новый объект FPDF, который будет содержать данные PDF. Конструктор FPDF принимает 3 аргумента:

                            • Ориентация страницы. Используйте ‘P’ для книжной ориентации страницы, или ‘L’ для альбомного расположения листа. По умолчанию используется ‘P’ .
                            • Единицы, которые используются для измерений на странице. Используйте ‘pt’ , ‘mm’ , ‘cm’ , или ‘in’ . По умолчанию используется ‘mm’ .
                            • Формат страницы. Возможные значения: ‘A3’ , ‘A4’ , ‘A5’ , ‘Letter’ , и ‘Legal’ . Или вы можете задать пользовательские значения для ширины и высоты в двумерном массиве. По умолчанию используется ‘A4’ .

                            Например, устанавливаем книжную ориентацию страницы, миллиметры в качестве единиц измерения и формат A4:

                            Устанавливаем цвет текста

                            Теперь установим цвет текста на странице. Делаем это с помощью метода FPDF SetTextColor() , передавая ему значения для красного, зеленого и синего цветов (каждое значение лежит в диапазоне 0-255). Используем значения цветов в массиве $textColour, который был создан в разделе конфигурации:

                            Создаем страницу

                            Теперь мы готовы создать новую пустую страницу в документе PDF с помощью вызова метода FPDF AddPage() :

                            Добавляем изображение логотипа

                            FPDF позволяет просто вставлять изображения на страницу. Нужно вызвать метод Image() со следующими аргументами:

                            • Путь к файлу с изображением. Это может быть абсолютный путь, или относительный к скрипту PHP script. Также можно использовать URL.
                            • Положение X и Y левого верхнего угла изображения на странице документа PDF. Если опустить данные аргументы, то будет использована текущая позиция.
                            • Ширина и высота изображения в документе PDF. Если опустить оба значения, то будут использовать оригинальные размеры изображения (при 72 DPI). Если опустить одно значение, то другое будет вычисляться автоматически.
                            • Тип изображения. Допустимые значения включают: ‘ JPEG’ , ‘PNG’ и ‘GIF’ (в верхнем или нижнем регистре при написании). Если опустить данное значение, то FPDF будет распознавать формат по расширению имени файла.
                            • URL ссылки для изображения. Указывается опционально — если указан URL, то изображение становится ссылкой, которая воспринимает нажатия кнопки мыши.

                            Все величины, такие позиция X и Y, высота и ширина, используют единицы измерения, указанные при создании документа PDF (в данном случае миллиметры).

                            Вы можете создать ваше собственное изображение логотипа (нужно использовать разрешение 300 DPI) или использовать изображение из исходников. Сохраните изображение в той же папке, что и скрипт PHP, а затеем вставьте изображение в документ PDF с помощью следующей команды:

                            Устанавливаем шрифт

                            FPDF позволяет установить шрифт, стиль и размер для текста в документе PDF. Для этого используется метод SetFont() со следующими аргументами:

                            • Семейство шрифтов. Вы можете использовать следующие стандартные имена для семейств шрифтов: ‘Courier’ , ‘Helvetica’ , ‘Arial’ , ‘Times’ , ‘Symbol’ , или ‘ZapfDingbats’ .
                            • Стиль шрифта. Можно использовать: » (обычный), ‘B’ (полужирный), ‘I’ (курсив), и ‘U’ (подчеркнутый). Можно использовать комбинации опций — например, ‘BU’ для полужирного подчеркнутого текста.
                            • Размер шрифта. Указывается в пунктах (по умолчанию используется значение 12 пунктов).

                            Для названия отчета на титульной странице используем шрифт Arial Bold размером 24 пункта:

                            Можно импортировать любой шрифт TrueType или Type 1 с помощью метода AddFont() . Для более подробных сведений надо почитать руководство по FPDF .

                            Добавляем текст

                            Теперь можно добавить название отчета. Объект FPDF использует концепцию "текущая позиция", куда вставляется следующая часть текста или другой элемент. Так как нужно, чтобы название отчета располагалось в середине страницы, необходимо передвинуть текущую позицию вниз к данной точке, которая располагается на расстоянии 160мм от верха страницы (значение хранится в конфигурационной переменной $reportNameYPos ). Для этого используется метод FPDF Ln() , который добавляет перевод строки на указанное расстояние:

                            Если не указать высоту перевода строки, то будет использоваться высота последней выведенной ячейки.

                            Теперь добавим название отчета. Существует несколько различных способов добавить текст с помощью FPDF. В нашем случае используем метод Cell() , который, помимо всего прочего, позволяет легко центрировать текст.

                            Cell() принимает следующие аргументы (все являются опциональными):

                            • Высота и ширина ячейки. По умолчанию ширина растягивается до правого поля, а высота устанавливается в 0.
                            • Строка текста для вывода. По умолчанию » .
                            • Указание для отображения рамки вокруг ячейки. Это может быть либо число ( 0 =нет рамки, 1 =рисуем рамку), или строка с одним или несколькими параметрами из следующего списка: ‘L’ (слева), ‘T’ (сверху), ‘R’ (справа), и ‘B’ (внизу). Значение по умолчанию: 0 .
                            • Куда помещать текущую позицию после вывода ячейки. Значение может быть 0 (справа от ячейки), 1 (начало следующей строки), или 2 (ниже). Значение по умолчанию: 0 .
                            • Выравнивание текста. Возможные значения: ‘L’ (выравнивание по левому краю), ‘C’ (выравнивание по центру), или ‘R’ (выравнивание по правому краю). Значение по умолчанию: ‘L’ .
                            • Нужно ли заливать фон ячейки цветом. true = заливаем цветом, false = оставляем фон прозрачным. Значение по умолчанию: false .
                            • URL ссылки. Если задан, то ячейка с текстом становится рабочей ссылкой на другой ресурс.

                            Теперь с помощью метода Cell() вставим название отчета и выровняем его по центру:

                            Создаем колонтитул страницы и вводный текст

                            Итак, титульная страница готова. Теперь надо создать страницу, на которой есть колонтитул, заголовок и некоторый вводный текст, за которым следует таблица и график.

                            Сделаем колонтитул страницы. Добавим новую страницу, затем выведем текст колонтитула, который содержит название отчета, выровнен по центру страницы и использует шрифт Arial размером 17. Используем переменную конфигурации $headerColour для установки цвета текста:

                            Теперь перейдем к тексту. Сначала выведем заголовок в обычном цвете и шрифтом Arial размером 20. Так как нам не нужно центрировать текст, можно использовать простой метод Write() , передав ему высоту строки и текст для вывода (в качестве опции можно также передать адрес URL для формирования ссылки):

                            Теперь можно вывести текст введения шрифтом Arial размером 12. Здесь есть пропуски 16 мм от первого абзаца и 12 мм между параграфами. Задаем для каждой строки высоту в 6 мм:

                            Метод Write() автоматически переводит текст на следующую строку, когда он достигает правой стороны страницы.

                            Добавляем данные

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

                            Читайте также:  Esr метр на atmega8

                            Создаем строку заголовков таблицы

                            Таблица имеет строку, которая содержит в ячейках заголовки столбцов "PRODUCT", "Q1, "Q2", "Q3", и "Q4". Ячейка "PRODUCT" использует отличный от других заголовков цвет текста и фона.

                            Мы уже пользовались методом SetTextColor() для установки цвета текста. Для установки цвета фона надо использовать метод SetFillColor() , который имеет такие же аргументы как SetTextColor() .

                            Чтобы создать ячейки таблицы используется метод Cell() , которому задаются ширина и высота ячейки, содержание и выравнивание. Также передается 1 в качестве 4-го аргумента для установки рамки, и true в качестве 7-го аргумента для заполнения фона установленным цветом.

                            Ниже приведен код для создания строки заголовков. Сначала устанавливается полужирный шрифт. Затем создается ячейка "PRODUCT" с соответствующим текстом и фоном. Затем устанавливается цвет для оставшихся 4 ячеек заголовков, и выполняется цикл по элементам массива $columnLabels для вывода ячеек с выравниванием текста в них по центру:

                            Пробел в начале содержимого ячейки "PRODUCT" помогает сформировать отступ в ячейке таблицы от левой границы. Такой же трюк будет использоваться для наименований продуктов в крайнем левом столбце (к сожалению, пока нет способа контролировать отступ в ячейках с помощью FPDF).

                            Создаем строки с данными

                            Остальная таблица состоит из 4 строк с данными продаж (по одной строке на продукт) для 4-х кварталов. Сначала определим пару переменных:

                            Переменные служат для:

                            $fill : Заполнять фон ячейки цветом или нет. Мы будем переключать данное значение после вывода каждой строки для получения эффекта зебры в таблице.

                            $row : Текущий номер строки. Она позволяет выводить соответствующий номер для каждой строки при перемещении по таблице.

                            Теперь можно организовать цикл по элементам массива $data с помощью foreach для вывода строк Для каждой строки создаем левую ячейку, которая содержит название продукта, и четыре ячейки с данными. Устанавливаем соответствующие цвета для тескта и фона для каждой ячейки.

                            Для вывода ячеек данных используется цикл for для прохода по четырех элементному массиву с данными, а для вывода данных в формате с разделением тысяч вызываем функцию PHP number_format() .

                            После вывода строки увеличиваем переменную $row , переключаем переменную $fill , и используем Ln() для перехода к началу следующей строки.

                            Вот код всего цикла:

                            Создаем график

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

                            Вычисление масштаба и ширины столбика

                            Сначала надо вычислить масштаб для осей X и Y. Для масштаба по оси X вычисления заключаются в простом делении количества продуктов на желаемую ширину графика (нужно учесть небольшие отступы слева и справа для лучшего вида):

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

                            Теперь, зная масштаб по оси X, можно вычислить ширину (в мм) каждого столбца графика. Это инверсированное значение масштаба по оси X, уменьшенное в полтора раза для организации расстояния между столбцами:

                            Добавляем линии осей и метки на них

                            Теперь можно добавить линии осей X и Y, метки данных и метки осей. Используем шрифт Arial с размером 10 для меток данных.

                            Для вывода линии в FDPF используется метод Line() , которые принимает четыре аргумента: координаты X и Y начала линии, и координаты X и Y конца линии.

                            Для оси X выводим горизонтальную линию вдоль низа графика, оставляя 30 мм для меток по оси Y слева. Затем выводим каждое имя продукта в массиве $rowLabels как текстовую ячейку в соответствующую точку:

                            Метод SetXY() позволяет устанавливать текущую позицию в нужное место на странице.

                            Для оси Y выводим вертикальную линию слева от графика, оставляя 30 мм для меток данных по оси Y. Линию оси делаем на 8 мм больше желаемой высоты графике для того, чтобы было место для вывода метки оси. Затем организуем цикл от нуля до максимального значения данных $maxTotal , которое было определено ранее. Размер шага установлен в переменной $chartYStep (20,000). На каждом шаге выводим текущее значение выровненной вправо и короткую метку:

                            Теперь можно добавить метки осей. Используем шрифт Arial полужирный с размером 12. Размещаем метку оси X ниже меток данных, а метку оси Y — наверху оси Y:

                            Выводим столбцы графика

                            Завершающей стадией является создание самого графика. Для вывода столбцов используется метод FPDF Rect() , который выводит прямоугольник. Метод использует следующие аргументы:

                            • Координаты X и Y верхнего левого угла прямоугольника.
                            • Ширина и высота прямоугольника.
                            • Стиль прямоугольника. Может иметь значения ‘D’ или » (выводим обводку), ‘F’ (заполняем текущим цветом фона), или ‘DF’ / ‘FD’ (обводка и заполнение).

                            Теперь выводим столбцы. Установим переменную $xPos , которая служит для отслеживания текущей позиции по X. Зададим ей значение 40 мм с учетом расстояния для меток по оси Y и отступа для первого столбца. Теперь создадим переменную $bar , которая будет содержать номер текущего столбца. Она будет использоваться для установки цвета для столбца:

                            Теперь проходим циклом по массиву $data , вычисляем суммарное значение для каждой строки и выводим столбец от оси X до этого значения, масштабированного с помощью $yScale . Цвет для каждого столбца изменяется с помощью счетчика $bar , который является индексом в массиве $chartColours . После вывода текущего столбца перемещаем позицию X к началу следующего, увеличиваем счетчик $bar и продолжаем цикл:

                            В коде используется оператор PHP деление по модулю ( % ) для повтора цвета столбца, если количество столбцов превышает количество элементов в массиве $chartColours .

                            Отправляем документ PDF браузеру

                            Документ PDF готов! Осталось только отправить его браузеру, чтобы пользователь мог просмотреть его или загрузить.

                            Для этого используется метод FPDF Output() . Он принимает два аргумента: предполагаемое имя для PDF файла и флаг назначения. Данный флаг может принимать следующие значения:

                            I : Выводить PDF на экран, если такая функция поддерживается браузером, иначе загружать.

                            D : Загружать PDF.

                            F : Сохранять файл в папке на сервере.

                            S : Возвращать данные PDF как строку.

                            Для нашего примера используется опция I для вывода PDF на экран, если возможно:

                            Output() автоматически посылает заголовок HTTP "Content-type: application/pdf" , который сигнализирует браузеру о том, что следует ожидать документ PDF.

                            Теперь вы готовы протестировать скрипт. Открывайте браузер и переходите на URL, где расположен скрипт, например , www.example.com/report.php . Вы должны увидеть PDF в окне браузера. Или будет выведено диалоговое окно, в котором вам будет предложено сохранить документ PDF на вашем жестком диске. Вы можете потом открыть PDF файл в программе для просмотра PDF, например, в Acrobat Reader или Preview.

                            Для создания PDF документа нужен только PHP и FPDF.

                            Заключение

                            В данном уроке вы узнали как использовать PHP с библиотекой FPDF для генерации отчета в формате PDF. Были продемонстрированы методы библиотеки FPDF для создания текста, таблиц и графиков.

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

                            Данный урок подготовлен для вас командой сайта ruseller.com
                            Источник урока: www.elated.com/articles/create-nice-looking-pdfs-php-fpdf/
                            Перевел: Сергей Фастунов
                            Урок создан: 15 Сентября 2010
                            Просмотров: 118699
                            Правила перепечатки

                            5 последних уроков рубрики "PHP"

                            Фильтрация данных с помощью zend-filter

                            Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

                            Контекстное экранирование с помощью zend-escaper

                            Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

                            Читайте также:  Meta inf что это

                            Подключение Zend модулей к Expressive

                            Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

                            Совет: отправка информации в Google Analytics через API

                            Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

                            Подборка PHP песочниц

                            Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.


                            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 как вложение в браузер. Этот метод имеет необязательный второй параметр, массив опций:

                            • Accept-Rangesboolean, отсылает заголовок “Accept-Ranges” (по умолчанию false).
                            • Attachmentboolean, отсылает заголовок “Content-Disposition: attachment” заставляя браузер отображать запрос на сохранение (по умолчанию true).
                            • compressboolean, включает сжатие содержимого (по умолчанию true).

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

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

                            Продвинутое использование

                            Теперь давайте немного поговорим о продвинутом использовании 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.

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

                            Добавить комментарий

                            Ваш e-mail не будет опубликован. Обязательные поля помечены *