Как перевести php в pdf
Generating PDF files with PHP and FPDF
Большинство web-сервисов экспортируют данные в разных форматах для дальнейшего использования. Данная статья о том, как экспортировать данные в pdf-формате.
Хотя многие знают как это делать, я опишу кратко для тех кто не знает.
PHP позволяет нам генерировать файлы в формате pdf налету. FPDF — это бесплатный код на языке php, позволяющий создавать документы в формате pdf и производить с ними различные манипуляции.
PDFlib
PHP API содержит большое количество функций для работы с PDF, реализованных на базе PDFlib. Несмотря на это, данная библиотека не является бесплатной для коммерческого использования. Бесплатная версия называется PDFlib Lite и бесплатная для персонального использования, однако она ограничена в функциональности. Для того чтобы использовать полную библиотеку PDFlib необходимо купить лицензию.
Почему FPDF?
Альтернатива — это использование FPDF, бесплатный класс содержащий большое количество функций для создания и манипулирования PDF-документами. Ключевое слово для данного момента — это ее бесплатность. Вы можете скачать, использовать и модифицировать данный класс как вам заблагорассудится. В дополнение к бесплатности, эта библиотека намного проще, чем PDFlib. Для использования PDFlib необходимо установить ее как расширение к PHP, в то время как FPDF может быть подключена в программу напрямую.
Создание документов PDF
Для того чтобы начать, необходимо скачать код FPDF с сайта FPDF Web site и включить в программу. Например, вот так
$pdf->SetAuthor(‘Lana Kovacevic’);
$pdf->SetTitle(‘FPDF tutorial’);
В функцию AddPage () можно передать параметры «P» или «L» для указания ориентации страницы. Функция SetDisplayMode определяет как будет отображена страница. Вы можете определить параметры увеличения и разметки. В примере мы используем 100% увеличение и разметку по умолчанию, определенную в программе, используемой для просмотра.
Сейчас, когда у нас есть страница, давайте вставим в нее изображение для того чтобы сделать страницу приятней, также мы добавим ссылку. Мы отобразим логотип FPDF используя функцию Image и передадим в нее следующие параметры — название файла, размерность и адрес.
$pdf->SetXY(10,50);
$pdf->SetFontSize(10);
$pdf->Write(5,’Congratulations! You have generated a PDF. ‘);
Здесь мы указали имя файла и параметры вывода, в данном случае «I». «I»-параметр выведет результат в браузер.
require(‘fpdf.php’);
//create a FPDF object
$pdf=new FPDF();
//set document properties
$pdf->SetAuthor(‘Lana Kovacevic’);
$pdf->SetTitle(‘FPDF tutorial’);
//set font for the entire document
$pdf->SetFont(‘Helvetica’,’B’,20);
$pdf->SetTextColor(50,60,100);
//set up a page
$pdf->AddPage(‘P’);
$pdf->SetDisplayMode(real,’default’);
//insert an image and make it a link
$pdf->Image(‘logo.png’,10,20,33,0,’ ‘,’http://www.fpdf.org/’);
//display the title with a border around it
$pdf->SetXY(50,20);
$pdf->SetDrawColor(50,60,100);
$pdf->Cell(100,10,’FPDF Tutorial’,1,0,’C’,0);
//Set x and y position for the main text, reduce font size and write content
$pdf->SetXY (10,50);
$pdf->SetFontSize(10);
$pdf->Write(5,’Congratulations! You have generated a PDF.’);
//Output the document
$pdf->Output(‘example1.pdf’,’I’);
Сейчас когда мы научились создавать документы, посмотрим что еще можно сделать, используя FPDF. Пример ниже показывает нам как создать верх и низ (хедер и футер 🙂 ) нашего документа.
require(‘fpdf.php’);
class PDF extends FPDF
<
function Header()
<
$this->Image(‘logo.png’,10,8,33);
$this->SetFont(‘Helvetica’,’B’,15);
$this->SetXY(50, 10);
$this->Cell(0,10,’This is a header’,1,0,’C’);
>
function Footer()
<
$this->SetXY(100,-15);
$this->SetFont(‘Helvetica’,’I’,10);
$this->Write (5, ‘This is a footer’);
>
>
$pdf=new PDF();
$pdf->AddPage();
$pdf->Output(‘example2.pdf’,’D’);
Как вы видите мы создали дочерний класс, используя наследование и создания функций Header и Footer. Затем мы создали новый объект и добавили страницу в документ. Функция AddPage автоматически вызовет функции Header и Footer. В конце мы вывели полученную информацию в файл с названием example2.pdf, используя значение «D». В этом случае браузер предложит сохранить данный файл.
Итак, мы изучили основы создания PDF-документов, для более подробной информации используйте FPDF Web site.
How to convert a PHP web page to PDF? [closed]
Want to improve this question? Update the question so it’s on-topic for Stack Overflow.
I have a PHP file that generates a report from the database, and I want this page to be converted into a PDF file, so it can be saved and printed. How do I convert a web page to a PDF? Is there any tool available or a PHP script?
6 Answers 6
You can use MPDF, a PHP library which generates PDF files from UTF-8 encoded HTML. It’s under GNU GPL v2 licence.
Make use of TCPDF Plugin.
Here’s an example and try this after configuring the above on your code.
I used pretty often:
Made so far a good job, there are a few bugs but else it does very well.
With TCPDF I had the most problems, since it seems that it doesn’t support the convertation from HTML to PDF that well.
If you want generate PDF client-side (with a button on the html report), you could use jsPDF (http://parall.ax/products/jspdf)
You can use wkhtmltopdf or tcpdf scripts to convert html pages to pdf
DomPDF looks like what you’re looking for.
dompdf is an HTML to PDF converter. At its heart, dompdf is (mostly) CSS 2.1 compliant HTML layout and rendering engine written in PHP. It is a style-driven renderer: it will download and read external stylesheets, inline style tags, and the style attributes of individual HTML elements. It also supports most presentational HTML attributes.
Dompdf – мощнейший PHP-класс для конвертирования HTML-документов в PDF-файлы
Не так давно передо мной встала задача – организовать экспорт HTML-данных в один из популярных графических файлов или же в PDF.
Поскольку получать на выходе картинку в данном случае мне показалось безумием, я решил остановиться на PDF.
Поискав информацию в Интернете и испробовав уйму различных вариантов реализации похожего функционала, я обнаружил, что часть из них работают некорректно, а часть – попросту не работает с кириллицей (русским языком).
Это, конечно, меня не огорчило, и потратив еще немного времени (как говорится, кто ищет – тот всегда найдет), я нашел-таки тот инструмент, который помог мне решить поставленные задачи.
Это класс «Dompdf» для PHP. Что же он из себя представляет?
Возможно, что-то забыл упомянуть, но согласитесь – звучит впечатляюще.
Так вот, именно этот класс помог мне превратить некий документ HTML в идентичный PDF. Именно тому, как им пользоваться, и будет посвящена эта статья.
Итак, прежде всего, для того чтобы воспользоваться этим классом, вы скачиваете архив в конце статьи.
Далее загружаете файлы к себе на сервер и осуществляете подключение скрипта в вашем PHP-файле:
Здесь мы указываем документ непосредственно в теле скрипта, но также вы можете заменить всю строку, например, на:
Где «LINK» – ссылка на HTML-страницу, которую нужно конвертировать.
Ну и финальные штрихи – это добавить соответствующие теги класса:
И общая картина получается такая:
Если вы не хотите, чтобы при посещении скрипта происходило скачивание полученного PDF-файла, а хотите поместить данные в переменную для дальнейшего использования, то строку:
Еще один важный момент: если ссылки на изображения прописаны не относительные, а абсолютные (то есть не «/logo.png», а «https://your_site.com/logo.png»), то в таком случае откройте файл dompdf_config.inc.php в папке /dompdf/ и строку:
Вот, собственно, и все. Очень важный момент: если вы получаете ошибку при конвертировании, то всего скорее, вы используете новые свойства стилей (как было у меня), в таком случае – просто постарайтесь оптимизировать (упростить) свой код.
Создание PDF-файлов с помощью PHP
PDF-файлы вполне могут быть лучшим форматом для распространения документов в Интернете. В сегодняшнем учебнике я покажу вам, как вы можете создавать PDF-файлы с помощью PHP. Давай сделаем это!
Начнем
Существует несколько методов, которые вы можете использовать для создания PDF-файлов с помощью PHP. Вы можете использовать библиотеку PDFlib, но это довольно дорого, по крайней мере, для коммерческой работы. Сегодня мы будем работать с библиотекой FPDF, которая бесплатна как для личного, так и для коммерческого использования, и совсем не сложная в работе.
Для начала перейдите на сайт FPDF и нажмите загрузки слева. Под всеми руководствами получите zip-архив версии 1.6 (хотя с момента последнего обновления прошло некоторое время, форумы на сайте все еще довольно активны). Разархивируйте файлы; все, что вам нужно из этой папки, это файл fpdf.php и каталог шрифтов.
hello_world.php
Прежде чем мы начнем добавлять текст к вашему документу, нам нужно сделать две вещи: 1) добавить страницу в pdf и 2) установить шрифт.
Теперь мы готовы добавить текст. Весь текст, который вы пишете в PDF-файле, будет записан в ячейки.
Мы могли бы передать этому методу два параметра, но на данный момент мы их просто оставим. Теперь, когда это произойдет, PDF-файл будет отображаться при посещении страницы. Итак, давайте сделаем это прямо сейчас! Вот что я получаю:
Отличная работа! Вы создали свой первый PDF-файл. Вернемся к строке, которая создала текстовую ячейку и внесем изменения:
Если вы перезагрузите страницу сейчас и обнаружите, что ничего не произошло, просто добавьте случайную строку запроса в URL-адрес, чтобы принудительно обновить содержимое.
В скором времени мы создадим небольшой скрипт для создания новых файлов, но давайте посмотрим, как сначала установить несколько дополнительных параметров.
Полный скринкаст
SetFillColor / SetTextColor
Вы можете заполнять текстовые ячейки цветом фона; мы увидим, как это сделать в нашем приложении, но сначала вы должны установить цвет заливки. Просто передайте этой функции значения красного, зеленого и синего (от 0 до 255). Вы можете установить цвет текста таким же образом.
Если вы хотите установить все три цвета в одно и то же значение, просто используйте один параметр.
SetLineWidth
При рисовании границы на ячейках нетрудно настроить ширину границы. Просто назовите этот метод, передав число с плавающей точкой; помните, что вы установили единицы измерения, когда вы создали экземпляр FPDF. Когда вы начинаете, границы имеют ширину 0,2 мм.
SetAuthor / SetTitle / SetSubject / SetCreator / SetKeywords
SetMargins / SetTopMargin / SetLeftMargin / SetRightMargin
По умолчанию поля вашей страницы составляют 1 см. Вы можете установить верхнее, левое и правое поля отдельно с их соответствующими функциями или установить их все сразу.
Но как насчет нижней границы? Я рад, что вы спросили, о чем позаботилась другая функция.
SetAutoPageBreak
Эта функция принимает логическое значение, определяя, хотите ли вы, чтобы библиотека добавляла разрыв страницы при необходимости или вы хотите сделать это вручную. Если значение равно true (по умолчанию), вы можете добавить второй параметр, определяющий, как близко вы хотите получить разрыв. По умолчанию это 2 см.
Создание чека
Теперь, когда у нас есть понимание того, как создать PDF-файл, давайте начнем наше небольшое приложение. Мы начнем с создания HTML-формы. Когда пользователь нажимает «Отправить», мы берем значения из формы и используем их для создания квитанции для нашего клиента.
Прежде всего, небольшая оболочка HTML:
index.html
Мы добавим еще один набор полей для продуктов, которые покупает пользователь:
Конечно, наша форма заканчивается кнопкой отправки.
style.css
Как вы можете видеть, мы придаем большинству элементов некоторый минималистский стиль. Вот как выглядит наша форма:
Генератор чеков
Сейчас мы снова вернулись к PHP. Прежде всего: подключить библиотеку:
Затем вместо создания экземпляра класса FPDF мы собираемся наследовать его на собственный класс. Это позволит нам сделать некоторые изящные вещи. Смотрите внимательно сейчас:
Мы начали свой новый класс, написав конструктор. Мы указали все значения параметров по умолчанию, поэтому наш конструктор можно вызвать и без них. Внутри функции мы вызываем конструктор родительского класса, а затем устанавливаем поля.
Теперь мы подключаемся к двум специальным функциям: Верхний и нижний колонтитулы.
Эта функция будет вызываться в начале каждой страницы нашего PDF-файла. Сначала мы устанавливаем шрифт, цвет заливки и цвет текста. Затем мы выводим нашу ячейку. Обратите внимание, что мы установили ширину в 0. Это специальное значение; ячейка будет занимать все пространство справа от начальной точки (пока она не встретится с правым краем). Поскольку мы начинаем с левого поля, мы получим ячейку по всей ширине страницы (минус поля).
Теперь для функции нижнего колонтитула:
Затем мы создаем ячейку; опять же, мы используем трюк 0-ширины; мы установили высоту 20pts. Мы устанавливаем текст, придаем ему верхнюю границу и центрируем. Готово!
Мы снова вернемся к нашему классу, но пока давайте начнем создавать квитанцию. Создав экземпляр нашего класса, добавив страницу и установив шрифт, мы можем перейти к делу.
Это не перенесет нас вниз на 100 точек; это устанавливает 100 точек от верхней части страницы. Это не включает поля, поэтому мы на 30 пунктов ниже от нашего заголовка.
Начнем с создания ячейки шириной 100pt и 13pt с текстом «Ordered By». Затем мы удаляем шрифт, чтобы удалить полужирный шрифт. Затем мы создаем другую ячейку и передаем ей имя, которое мы получили от нашей формы. Конечно, в реальном проекте вы будете проверять эти значения перед их использованием.
Двигаясь дальше, мы добавим дату покупки:
Опять же, мы устанавливаем шрифт жирным шрифтом; после записи «Дата» мы удаляем полужирный шрифт и печатаем текущую дату, используя функцию date PHP. Указанный формат даст нам название месяца, число дней, за которым следует запятая, и четырехзначный год. Мы помещаем границу как 0 (по умолчанию), чтобы мы могли перейти к параметру линии. Мы устанавливаем его как 1, что поместит нашу позицию в начало следующей строки; это эквивалент использованию «enter» в текстовом процессоре.
Вот как это выглядит сейчас:
image: adress / date
Теперь давайте распечатаем таблицу продуктов, приобретенных нашим клиентом.
Вот функция. Начнем с установки шрифта, цвета текста, цвета заливки и ширины линии. Затем мы настраиваем ячейки заголовка. Каждая из них имеет границу слева, сверху и справа, текст по центру и заполнение.
Возвращаясь к тексту нашего PDF-документа, мы теперь пропустим 50 точек.
Текст не слишком важен, но слишком длинный для одной линии; плюс, в нем есть несколько разрывов строк. Хотя мы не используем их здесь, MultiCell также принимает параметры границ, выравнивания и заполнения.
Метод Write принимает только три параметра: высоту, текст и необязательную ссылку. Нет параметра ширины, потому что он перейдет на правый край, прежде чем будет разрыв линии. Хотя это не лучшее его использование, мы будем использовать его для добавления ссылки:
Обратите внимание, что перед записью мы устанавливаем цвет шрифта и текста, чтобы он выглядел как ссылка.
На этом с PHP все. Давайте добавим еще одну функцию: мы отправим нашу форму с помощью Ajax. Перед тем, как вернуться к index.html, внесите эти изменения для вызова Output :
Вернемся в HTML, давайте импортируем jQuery и добавим наш обработчик клика в кнопку отправки:
Когда кнопка нажата, мы отправим форму. При успешном возврате мы прячем второй div, очищаем его содержимое и перезагружаем его с помощью функции HTML. У этого нового HTML есть ссылка для получения чека. Затем мы снова отображаем div. Не забудьте вернуть false, чтобы форма не отправлялась сама.
Вот что мы получаем
И вот наш готовый PDF.
И это все, ребята! Используйте комментарии для замечаний или предложений!
Создаем документ PDF из PHP скрипта с помощью библиотеки FPDF
В данном уроке показано, как использовать бесплатную библиотеку FPDF для генерации PDF документа из PHP скрипта.
Формат PDF может быть очень удобным средством для распространения документов среди посетителей вашего сайта. Документ PDF является самодостаточным, выглядит одинаково в любой программе для просмотра PDF файлов, и его легко распечатать. Такой формат очень часто используется для отчетов, руководств, счетов, описаний продуктов и так далее.
Удобно иметь возможность создавать PDF документ из скрипта PHP. Например, вы можете сделать пользовательский отчет в формате PDF на основе установок посетителя и включить в него актуальные данные.
В данном уроке мы создадим прекрасный 2-х страничный документ PDF с помощью PHP. Мы будем использовать библиотеку FPDF.
Вот что должно в конечном итоге получиться:

Установка FPDF
Начинаем писать скрипт PHP
Теперь у вас есть установленный FPDF и можно начать писать скрипт PHP для генерации отчета в формате PDF. Создаем файл report.php в той же папке, где вы создали папку fpdf и открываем его в текстовом редакторе.
Теперь добавим несколько переменных для конфигурации:
Данные переменные позволяют настраивать ваш отчет, и лучше всего их оставить в начале файла, чтобы быстро находить ключевые свойства для изменения конфигурации. С их помощью настраиваются:
Создаем титульную страницу
Теперь можно приступить к построению PDF. Сначала создаем титульную страницу отчета. Оно содержит логотип компании и название отчета, расположенные по центру страницы.
Создаем объект FPDF
Сначала нужно создать новый объект FPDF, который будет содержать данные PDF. Конструктор FPDF принимает 3 аргумента:
Например, устанавливаем книжную ориентацию страницы, миллиметры в качестве единиц измерения и формат A4:
Устанавливаем цвет текста
Создаем страницу
Теперь мы готовы создать новую пустую страницу в документе PDF с помощью вызова метода FPDF AddPage() :
Добавляем изображение логотипа
FPDF позволяет просто вставлять изображения на страницу. Нужно вызвать метод Image() со следующими аргументами:
Все величины, такие позиция X и Y, высота и ширина, используют единицы измерения, указанные при создании документа PDF (в данном случае миллиметры).
Вы можете создать ваше собственное изображение логотипа (нужно использовать разрешение 300 DPI) или использовать изображение из исходников. Сохраните изображение в той же папке, что и скрипт PHP, а затеем вставьте изображение в документ PDF с помощью следующей команды:
Устанавливаем шрифт
FPDF позволяет установить шрифт, стиль и размер для текста в документе PDF. Для этого используется метод SetFont() со следующими аргументами:
Для названия отчета на титульной странице используем шрифт Arial Bold размером 24 пункта:
Добавляем текст
Если не указать высоту перевода строки, то будет использоваться высота последней выведенной ячейки.
Cell() принимает следующие аргументы (все являются опциональными):
Теперь с помощью метода Cell() вставим название отчета и выровняем его по центру:
Создаем колонтитул страницы и вводный текст
Итак, титульная страница готова. Теперь надо создать страницу, на которой есть колонтитул, заголовок и некоторый вводный текст, за которым следует таблица и график.
Теперь можно вывести текст введения шрифтом Arial размером 12. Здесь есть пропуски 16 мм от первого абзаца и 12 мм между параграфами. Задаем для каждой строки высоту в 6 мм:
Метод Write() автоматически переводит текст на следующую строку, когда он достигает правой стороны страницы.
Добавляем данные
Теперь нужно добавить таблицу с данными ниже текста. сначала установим цвет рамки таблицы. Метод SetDrawColor() устанавливает цвет, который используется для рамок и других линий, так что мы можем использовать его для установки цвета для рамок ячеек таблицы. Затем текущую позицию опускаем вниз на 15мм для создания пробела между текстом и таблицей:
Создаем строку заголовков таблицы
Таблица имеет строку, которая содержит в ячейках заголовки столбцов «PRODUCT», «Q1, «Q2», «Q3», и «Q4». Ячейка «PRODUCT» использует отличный от других заголовков цвет текста и фона.
Пробел в начале содержимого ячейки «PRODUCT» помогает сформировать отступ в ячейке таблицы от левой границы. Такой же трюк будет использоваться для наименований продуктов в крайнем левом столбце (к сожалению, пока нет способа контролировать отступ в ячейках с помощью FPDF).
Создаем строки с данными
Остальная таблица состоит из 4 строк с данными продаж (по одной строке на продукт) для 4-х кварталов. Сначала определим пару переменных:
Переменные служат для:
$fill : Заполнять фон ячейки цветом или нет. Мы будем переключать данное значение после вывода каждой строки для получения эффекта зебры в таблице.
$row : Текущий номер строки. Она позволяет выводить соответствующий номер для каждой строки при перемещении по таблице.
Вот код всего цикла:
Создаем график
Последним элементом в нашем отчете является столбиковый график, отображающий сводную информацию по четырем продуктам за весь год.
Вычисление масштаба и ширины столбика
Сначала надо вычислить масштаб для осей X и Y. Для масштаба по оси X вычисления заключаются в простом делении количества продуктов на желаемую ширину графика (нужно учесть небольшие отступы слева и справа для лучшего вида):
Для вычисления масштаба по оси Y нужно найти общее значение по каждому продукту и затем определить среди них максимальное значение. Затем максимум можно будет разделить на желаемую высоту графика для получения значения масштаба по оси Y:
Теперь, зная масштаб по оси X, можно вычислить ширину (в мм) каждого столбца графика. Это инверсированное значение масштаба по оси X, уменьшенное в полтора раза для организации расстояния между столбцами:
Добавляем линии осей и метки на них
Теперь можно добавить линии осей X и Y, метки данных и метки осей. Используем шрифт Arial с размером 10 для меток данных.
Метод SetXY() позволяет устанавливать текущую позицию в нужное место на странице.
Выводим столбцы графика
Отправляем документ PDF браузеру
Документ PDF готов! Осталось только отправить его браузеру, чтобы пользователь мог просмотреть его или загрузить.
I : Выводить PDF на экран, если такая функция поддерживается браузером, иначе загружать.
F : Сохранять файл в папке на сервере.
S : Возвращать данные PDF как строку.
Для нашего примера используется опция I для вывода PDF на экран, если возможно:
Для создания PDF документа нужен только PHP и FPDF.
Заключение
В данном уроке вы узнали как использовать PHP с библиотекой FPDF для генерации отчета в формате PDF. Были продемонстрированы методы библиотеки FPDF для создания текста, таблиц и графиков.
Однако библиотека FPDF может много чего еще, например, создавать верхний и нижний колонтитулы для страниц, использовать автоматический переход на новую страницу и так далее. Просмотрите документацию по библиотеке на сайте FPDF.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.elated.com/articles/create-nice-looking-pdfs-php-fpdf/
Перевел: Сергей Фастунов
Урок создан: 15 Сентября 2010
Просмотров: 145767
Правила перепечатки
5 последних уроков рубрики «PHP»
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.












