Что такое код pdf_begin_template

Содержание

FPDF — Урок 1: Простой пример

Категории блога

Не так давно я рассказывал и приводил небольшой пример использования — FPDF – библиотека для создания PDF-файлов на PHP. Теперь я хочу попробовать перевести несколько Уроков с официального сайта библиотеки FPDF. Перевод будет вольным, так как я не владею знаниями английского языка. Все Уроки желательно изучать и при этом подглядывать в русский мануал по данной библиотеке.

Начнем с классического примера:

require(‘Fpdf\fpdf.php’); $pdf=new FPDF(); $pdf->AddPage(); $pdf->SetFont(‘Arial’,’B’,16); $pdf->Cell(40,10,’Hello World!’); $pdf->Output();

Для начала включаем библиотеку FPDF, в наш сценарий, после этого создаем объект FPDF. Конструктор FPDF () здесь используется со значениями по умолчанию: страница A4 портрет и единицей измерения являются миллиметры. А можно задать иначе (с явными значениями):

Здесь можно использовать ориентацию L(Альбомная), или P(Книжная) — первый параметр.
Второй параметр — единица измерения(pt-точка,mm-миллиметр,cm-сантиметр,in-дюйм), иными словами это те единицы измерения в которых будут отображаться шрифты.
Третий параметр — формат страницы (A3,A4,A5,Letter,Legal, или специальный формат, выраженный в виде массива из двух элементов: ширина и высота выраженных в единицах, заданных в unit).

На данный момент не существует ни одной страницы, поэтому мы должны добавить одну страницу с помощью AddPage (). При добавлении новой страницы Вы будете находится в левом верхнем углу страницы с учетом отступов, которые по умолчанию равны 1см. Поля могут быть изменены с помощью метода SetMargins ().

Прежде чем мы можем напечатать текст, обязательно следует выбрать шрифт с помощью метода SetFont (), в противном случае в документ ничего не будет выведено. Мы выбираем Arial Bold 16:

Кроме этого естественно можно указать: курсив, подчеркнутое или обычным шрифт(если вы хотите оставить обычный шрифт то просто оставьте этот параметр пустым). Обратите внимание, что размер шрифта задается в пунктах, не миллиметрах и не какой то другой единицей, это единственное исключение.

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

Теперь мы можем выводить ячейки в документ, с помощью метода Cell (). Ячейка представляет собой прямоугольную область, которая содержит строки текста(ячейку можно всячески оформить). Ячейка выводится на текущей позиции. В нашем примере мы указали ее размеры(ширина — первый параметр, высота второй параметр), текст который будет находится в ней. Остальные параметры могут содержать следующие данные: граница ячейки, текущая позиция после вывода ячейки, выравнивание текста и так далее(подробнее см. в мануале). Ну например чтобы добавить рамку, нужно сделать следующее:

$pdf->Cell(40,10,’Hello World !’,1);

Чтобы добавить новую ячейку текст которой будет выровнен по центру, и перевести следующий вывод на новую строку, нужно написать следующее:

$pdf->Cell(60,10,’Powered by FPDF.’,0,1,’C’);

В вышеприведенном коде: ширина — 60, высота — 10, текст — Powered by FPDF., граница ячейки — 0, текущая позиция после вывода ячейки — 1, выравнивание текста в ячейке — C(по центру).

Переход на новую строку можно осуществить с помощью метода Ln (). Этот метод позволяет задать высоту разрыва строки.

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

Внимание:

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

Результат Урока 1: Простой пример :

В следующем уроке мы узнаем больше о библиотеке FPDF и о том как формируется заголовок и подвал, как можно управлять разрывом страниц, вставим изображение, и сделаем нумерацию страниц — FPDF – Урок 2: Заголовок, подвал, разрыв страницы и изображение.

Заполнение форм PDF

На этой странице

В этом документе приведена информация о том, как заполнять формы PDF. (Если вы ищете информацию о создании формы с нуля или из отсканированного документа, а также о рассылке и отслеживании форм, нажмите соответствующую ссылку выше. Чтобы узнать ответы на распространенные вопросы о формах, нажмите ссылку «Вопросы и ответы о формах».)

В этом документе приведены инструкции по работе с Acrobat DC и Acrobat 2020. Инструкции по работе с Acrobat XI см. в справке по Acrobat XI.

Является ли форма заполняемой?

Не все формы являются заполняемыми. В некоторых случаях создатели форм не преобразуют файлы PDF в заполняемые формы. Кроме того, создатели форм могут намеренно создавать формы для заполнения от руки или с помощью инструмента Заполнить и подписать . Эти неинтерактивные формы называются простые формы.

Заполнение интерактивных форм

Интерактивная форма содержит поля, доступные для выбора и заполнения.

При необходимости нажмите правой кнопкой мыши документ и выберите инструмент Рука или Выделение во всплывающем меню.

Указатель изменяется на другой значок при его перемещении по полю. Например, в ситуациях, где возможен ввод текста в поле формы, инструмент Рука превращается в I-образный курсор . Некоторые текстовые поля являются динамическими. Это означает, что для того чтобы вместить все вводимые данные, они могут изменять свои размеры и переноситься на другую страницу.

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

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

Советы по поиску и устранению проблем, связанных с заполнением форм, см. в разделе Поиск и устранение проблем, связанных с заполнением форм.

Заполнение простых форм с помощью инструментов «Заполнить и подписать»

Простая форма не содержит интерактивных полей. Однако можно использовать инструменты «Заполнить и подписать» для добавления текста и других символов в любом месте формы. Инструкции представлены в разделе Заполнение формы PDF.

Заполнение простых форм в браузере

Множество пользователей просматривают формы PDF в браузере, например, при переходе по ссылке на веб-сайте. Если форма не содержит интерактивные поля, можно использовать инструмент «Заполнить и подписать», чтобы заполнить форму. Сохраните форму на компьютере, а затем откройте ее непосредственно в Acrobat или Acrobat Reader. Инструкции представлены в разделе Заполнение формы PDF.

Команды работы с формами

Tab или Shift+Tab

Подтверждение ввода текста и перемещение к следующему полю

Выбирает предыдущий переключатель в группе

Выбирает следующий переключатель

Отклонение ввода текста и отмена выбора поля формы

Esc (нажать дважды)

Выход из полноэкранного режима

Enter или Return (текстовое поле, состоящее из одной строки)

Подтверждает ввод текста и отменяет выбор поля

Enter или Return (текстовое поле, состоящее из нескольких строк)

Создает абзац в текущем поле формы

Enter или Return (флажок)

Устанавливает или снимает флажок

Подтверждает ввод текста и отменяет выбор текущего поля формы

Ctrl + Tab (Windows) Вставка табуляции в текстовом поле Alt + Tab (Mac) Вставка табуляции в текстовом поле

Автозаполнение форм (только для интерактивных форм)

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

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

Установки форм влияют на способ обработки приложением открываемых форм во время работы. В самих формах PDF установки не сохраняются.

Megano Blog

среда, 16 февраля 2011 г.

Использование PDF шаблонов C#.

Продолжая тему шаблонов, хочу раскрыть использование PDF вместе с закрытым исходным кодом. В сети можно найти достаточное количество статей, которые описывают данный процесс, но в основном они используют GNU General Public License библиотеки, а это ведет к открытию своего кода. Проект менеджер услышав об этом, вновь может посылать вас в лес, искать бесплатные отвертки…

Хочу обратить ваше внимание на проект PdfSharp и его лицензию, разрешающую использование в коммерческих целях.

Как использовать шаблоны? Немного теории:

Стандартный подход прост – графически рисуется требуемая форма, расставляются закладки или некие ключевые слова (наподобие @Name@), которые после отыскиваются в документе и заменяются на необходимые значения. Но, к сожалению, PDFsharp не поддерживает парсинг документа, этот подход потерпит фиаско.

Как же быть? Есть два выхода из положения, каждый из них требует больших трудозатрат, чем использование GPL библиотек (можете поискать реализации на iText), первый это полностью генерировать бланки без использования шаблонов, но при сложном бланке на это дело можно потратить чуть ли не целый день на бланк. И второй способ предлагаемый нам PDFsharp, это использовать шаблон как холст для рисования. Представьте, что у нас на столе, под стеклом лежит бланк документа и есть карандаш или маркер, которым мы рисуем на стекле, если стекло достаточно тонкое, то человек, взглянувший на такое «художество», будет считать его единым целым. Далее, мы как раз и будем рисовать на шаблоне, с помощью System.Drawing, подставляя нужные нам данные в требуемые места.

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

Илон Маск рекомендует:  Все об authtype или авторизация в apache

Не обладая большими талантами дизайнера, я приготовил такой бланк, и самолично его утвердил. :)

Создадим новое консольное приложение с именем UsingPdfTemplate, далее добавим к проекту ссылки на сборки PdfSharp.dll из каталога GDI+ (заранее скачанные с сайта проекта, на момент написания статьи версия 1_31), а так же на System.Drawing. Добавим к проекту файл template.pdf (взять можно из исходников к статье) и установим его свойство Build Action – Embedded Resource и Copy to Output Directory – Copy always.

Далее введем следующий код:

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

Теперь заполним поля «Должность», «Имя», «Email», добавим фотографию и таблицу посещений:

Получаем объект XGraphics и передаем его в методы DrawFields(), DrawImage(), DrawTable().

DrawFields отрисует поля на шаблоне, код метода:

Выставляем поддержку юникода и отрисовываем три строчки текста в вымеренных позициях.

Для отрисовки фотографии добавим в проект фото (можно так же взять из исходников фото моего кота), и пометим его свойство Build Action – Embedded Resource и Copy to Output Directory – Copy always.

DrawImage отрисует фотографию, код метода:

Очень простой метод — мы лишь получаем изображение из файла (XImage можно так же получить, используя System.Drawing.Image, который можно получить из потока) и отрисовываем его на документе по координатам с заданными размерами.

С таблицей будет посложнее, дело в том что PdfSharp ничего не знает о таблицах и способен их нарисовать только из линий, но не стоит падать духом, так как есть замечательная библиотека MigraDoc, которая поставляется вместе с PdfSharp. Нам лишь надо добавить ссылку на библиотеку MigraDoc.DocumentObjectModel.dll и MigraDoc.Rendering.dll.

DrawTable отрисует таблицу, код метода:

В этом методе мы вначале создаем MigraDoc.DocumentObjectModel.Document, потом таблицу, выставляем у таблицы ширину бордюра и размеры колонок. После чего заполняем семь строк данными и добавляем таблицу в документ, после создаем объект класса MigraDoc.Rendering.DocumentRenderer, который принимает в качестве параметра конструктора документ содержащий таблицу, подготавливаем и отрисовываем его, используя объект XGraphics переданный в метод.

Как результат у нас появляется заполненный PDF документ на основе шаблона:

Dompdf – мощнейший PHP-класс для конвертирования HTML-документов в PDF-файлы

Не так давно передо мной встала задача – организовать экспорт HTML-данных в один из популярных графических файлов или же в PDF.

Поскольку получать на выходе картинку в данном случае мне показалось безумием, я решил остановиться на PDF.

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

Это, конечно, меня не огорчило, и потратив еще немного времени (как говорится, кто ищет – тот всегда найдет), я нашел-таки тот инструмент, который помог мне решить поставленные задачи.

Это класс «Dompdf» для PHP. Что же он из себя представляет?

  1. Есть поддержка русского языка.
  2. Полностью бесплатен.
  3. Легок в использовании.
  4. Открытый исходный код.
  5. Поддержка HTML-разметки и CSS-стилей.
  6. Поддержка изображений.

Возможно, что-то забыл упомянуть, но согласитесь – звучит впечатляюще.

Так вот, именно этот класс помог мне превратить некий документ HTML в идентичный PDF. Именно тому, как им пользоваться, и будет посвящена эта статья.

Итак, прежде всего, для того чтобы воспользоваться этим классом, вы скачиваете архив в конце статьи.

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

Здесь мы указываем документ непосредственно в теле скрипта, но также вы можете заменить всю строку, например, на:

Где «LINK» – ссылка на HTML-страницу, которую нужно конвертировать.

Ну и финальные штрихи – это добавить соответствующие теги класса:

И общая картина получается такая:

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

Еще один важный момент: если ссылки на изображения прописаны не относительные, а абсолютные (то есть не «/logo.png», а «https://your_site.com/logo.png»), то в таком случае откройте файл dompdf_config.inc.php в папке /dompdf/ и строку:

Вот, собственно, и все. Очень важный момент: если вы получаете ошибку при конвертировании, то всего скорее, вы используете новые свойства стилей (как было у меня), в таком случае – просто постарайтесь оптимизировать (упростить) свой код.

Что такое код pdf_begin_template

(PHP 4 >= 4.0.5, PHP 5)

pdf_begin_template — Starts new template

Description int pdf_begin_template ( resource pdfdoc, float width, float height )

Start a new template definition.

Sorry. In the previous note I somehow managed to include the same program twice.
The program that uses templates to draw the fractal is

function initmengers (& $pdf , $level ) <
static $mengers ;
if( $level > 0 ) initmengers ( $pdf , $level — 1 );
$mengers [ $level ] = pdf_begin_template ( $pdf , 1 , 1 );
if( $level === 0 ) <
pdf_rect ( $pdf , $x , $y , 1 , 1 );
pdf_fill ( $pdf );
>
else <
for( $i = 0 ; $i 3 ; $i ++)
for( $j = 0 ; $j 3 ; $j ++)
if( $i != 1 || $j != 1 )
pdf_place_image ( $pdf , $mengers [ $level — 1 ], $j / 3 , $i / 3 , 1 / 3 );
>
pdf_end_template ( $pdf );
return $mengers [ $level ];
>
$pdf = pdf_new ();
pdf_open_file ( $pdf );
$pic = initmengers ( $pdf , 6 );
pdf_begin_page ( $pdf , 595 , 421 );
pdf_place_image ( $pdf , $pic , 50 , 50 , 300 );
pdf_end_page ( $pdf );
pdf_close ( $pdf );
$data = pdf_get_buffer ( $pdf );
header ( ‘Content-type: application/pdf’ );
header ( ‘Content-disposition: inline; filename=test.pdf’ );
header ( ‘Content-length: ‘ . strlen ( $data ));
echo $data ;
pdf_delete ( $pdf );
?>

A template is an «image» that can be drawn like a normal image, but is composed of pdflib-commands, directly specified in the program.
Templates can be used if you have a graphical pattern that you want to repeat several times — i.e. a logo repeated on top of each page. As the pdf-commands that draws the template are only included once in the file even if the template is shown several times, you can save a lot of space.

This program draws a simple fractal without the use of templates:

function drawmenger (& $pdf , $x , $y , $w , $level ) <
if( $level === 0 ) <
pdf_rect ( $pdf , $x , $y , $w , $w );
pdf_fill ( $pdf );
return;
>
$w /= 3 ;
for( $i = 0 ; $i 3 ; $i ++)
for( $j = 0 ; $j 3 ; $j ++)
if( $i != 1 || $j != 1 )
drawmenger ( $pdf , $x + $w * $j , $y + $w * $i , $w , $level — 1 );
>
$pdf = pdf_new ();
pdf_open_file ( $pdf );
pdf_begin_page ( $pdf , 595 , 421 );
drawmenger ( $pdf , 50 , 50 , 300 , 6 );

header ( ‘Content-type: application/pdf’ );
header ( ‘Content-disposition: inline; filename=test.pdf’ );
header ( ‘Content-length: ‘ . strlen ( $data ));
echo $data ;
pdf_end_page ( $pdf );
pdf_close ( $pdf );
pdf_delete ( $pdf );
?>

The file created is almost 1Mb.
Using templates to store the intermediate results reduces the filesize to a mere 3kb.

function drawmenger (& $pdf , $x , $y , $w , $level ) <
if( $level === 0 ) <
pdf_rect ( $pdf , $x , $y , $w , $w );
pdf_fill ( $pdf );
return;
>
$w /= 3 ;
for( $i = 0 ; $i 3 ; $i ++)
for( $j = 0 ; $j 3 ; $j ++)
if( $i != 1 || $j != 1 )
drawmenger ( $pdf , $x + $w * $j , $y + $w * $i , $w , $level — 1 );
>
$pdf = pdf_new ();
pdf_open_file ( $pdf );
pdf_begin_page ( $pdf , 595 , 421 );
drawmenger ( $pdf , 50 , 50 , 300 , 6 );

mPDF — как создать PDF документ с помощью PHP

mPDF — это библиотека PHP, которая легко генерирует PDF файл из HTML документа в кодировке UTF-8.

Наверное самая крутая библиотека из всех что я пробовал. У остальных библиотек много недоработок, сложность в структуре формирования. Библиотека mPDF, как пишет разработчик, основана на FPDF и HTML2FPDF с улучшением кода. Перейдем к логике формированию документа.

mPDF устанавливается через composer. Если не знаете, как установить композер, посмотрите уроки на ютубе, их достаточно много. А если у Вас установлен OpenServer, то он у Вас уже установлен и Вам остается просто перейти в консоль сервера.

Формирование PDF документа с комментариями

Архив с репозиторием приложу, вдруг исчезнет )))

Все намного проще чем казалось.
Буду рад комментариям.

Создание PDF при помощи PyFPDF и Python

ReportLab – это основной инструмент, который я использую для создания PDF с нуля. Однако, я заметил, что есть еще один — PyFPDF или FPDF для Python. Пакет PyFPDF – это порт «бесплатного» пакета PDF, который написан на PHP. Релиза этого проекта не было несколько лет, однако есть движения в его репозитории на Github, так что работа над проектом ведется. Пакет PyFPDF поддерживает Python 2.7 и Pyhton 3.4+.

В данной статье не будет утомительных разборов пакета PyFPDF. Однако, мы раскроем более чем исчерпывающую информацию для эффективного использования. Обратите внимание на то, что существует небольшая книжечка «Python и PDF: pyFPDF» от Эдвуда Оказио на Leanpub, если вы захотите узнать больше о библиотеке, сверх той информации, которая указана в данной статье или документации пакета.

Установка

Установка PyFPDF – это просто, так как он подразумевает работу с pip. Установка проходит следующим образом:

На момент написания, эта команда устанавливала версию 1.7.2 на Python 3.6 без каких-либо проблем. Во время установки вы увидите, что этот пакет не имеет зависимостей, что приятно.

Базовое использование

Теперь, когда у вас есть установленный PyFPDF, попробуем использовать его для создания простого файла PDF. Откройте ваш редактор Python и создайте новый файл под названием **simple_demo.py**. После этого, введите следующий код:

Первый элемент, который нам нужно обсудить, это импорт. Здесь мы импортируем класс FPDF из пакета fpdf. Настройки по умолчанию этого класса создают PDF в режиме Portrait, используя миллиметры в качестве единицы измерения и размер страницы А4. Если вы хотите быть четче, вы можете вписать следующую строку установки:

Я не фанат использования буквы «P», чтобы указать классу, какая это ориентация. Вы можете использовать «L», если предпочитаете пейзаж вместо портрета.

Пакет PyFPDF поддерживает supports ‘pt’, ‘cm’ и ‘in’ в качестве альтернативных единиц измерения. Если обратиться к источнику, вы увидите, что пакет PyFPDF поддерживает только следующие размеры страниц:

Это выглядит немного ограниченно, в сравнении с ReportLab, где у вас в распоряжении несколько дополнительных размеров поддерживаемых изначально, кроме этого, вы можете указать собственный размер страницы, если вам это нужно.

В любом случае, следующий шаг – это создание страницы при помощи метода add_page. Далее, мы указываем шрифт при помощи метода set_font. Вы увидите, что мы передаем родительское наименование шрифта и размер, которые нам нужны. Вы также можете настроить стиль шрифта при помощи аргумента style. Если вы хотите сделать это, помните, что для этого нужна строка, такая как «В» для жирного шрифта, или «Bl» для полужирного.

Илон Маск рекомендует:  Список файлов через FTP

Далее, мы создаем клетку, шириной 200 миллиметров и 10 миллиметров в высоту. Клетка, по большому счету, плавающая, и содержит текст, к ней можно подключить границы. Она разделяется автоматически, если включен автоматический разрыв страницы, так что клетка перейдет за границу страницы. Параметр txt – это текст, который вам нужно ввести в PDF. Параметр In указывает PyFPDF, что нужно добавить разрыв строки, если он указан как 1, что мы и делаем в нашей статье. Наконец, мы можем установить выравнивание текста по ширине (по умолчания), или по центру («С»). Здесь мы выбираем второй вариант.

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

Давайте попробуем узнать побольше о работе PyFPDF со шрифтами.

Работа со шрифтами

PyFPDF содержит набор базовых шрифтов, старательно прописанных в класс FPDF:

Создание PDF-документов на лету с помощью TCPDF

Конвертирование Web-страниц в документы для высококачественной печати

TCPDF – один из самых активно развивающихся проектов ресурса Sourceforge.net – включает в себя мощный механизм создания PDF-документов, полностью реализованный на PHP. Такой подход упрощает установку TCPDF даже на Web-сайтах, не позволяющих получить доступ к системным каталогам или скомпилировать собственный код. Кроме того, сильно упрощается итеративная разработка, поскольку без каких-либо дополнительных действий можно сразу увидеть результаты выполнения написанного PHP-кода.

Библиотека TCPDF поддерживает ряд распространенных графических форматов, включая векторный формат SVG и растровые форматы, такие как JPEG и PNG. Отдельная утилита позволяет обрабатывать шрифты TrueType, OpenType, PostScript Type 1 и CID-0 и добавлять их в созданные с помощью TCPDF документы. TCPDF можно использовать для генерации линейных и двумерных штрих-кодов; она поддерживает все обычные свойства PDF, такие как закладки, гиперссылки, сжатие, примечания, шифрование и цифровые подписи.

Библиотека TCPDF и Web-страницы, использующие ее возможности, написаны на PHP; что упрощает создание и развертывание страниц с функциями генерации PDF-документов. Для работы с TCPDF можно использовать любой поддерживаемый Web-сервер и среду разработки PHP. При разработке примера этой статьи я использовал следующее программное обеспечение.

  • Eclipse 3.5.2 – одна из моих любимых сред разработки с открытым исходным кодом, поддерживающая широкий набор сред и языков программирования.
  • PHP Development Tools 2.2.0 – PHP-плагин для Eclipse.
  • MAMP Pro 1.9 – удобный пакет для Mac OS X, в который включены программные продукты Apache, MySQL и PHP, работающие в изолированной среде с удобным клиентским графическим интерфейсом. Хотя Mac OS X и поставляется с предустановленными Apache и PHP, я предпочитаю использовать MAMP Pro, потому что в этом пакете имеется стабильно работающий изолированный инструментарий разработчика, состоящий из Web-сервера, СУБД и языка PHP.
  • TCPDF 5.0.006 – текущая стабильная версия TCPDF.

Ссылки для загрузки этих программных продуктов содержатся в разделе Ресурсы.

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

Установка TCPDF

Библиотека TCPDF полностью загружается с Web-сайта Sourceforge.net в виде zip-архива. Таким образом, достаточно распаковать архив при помощи любого zip-распаковщика, и вы получите каталог, содержащий все необходимое для начала работы.

Добавив каталог TCPDF в список Web-директорий, можно получить доступ к документации TCPDF, загрузив страницу doc/index.html, а также просматривать любые примеры, загрузив файл examples/index.php. Эти примеры также доступны на Web-сайте TCPDF (см. раздел Ресурсы).

Однако прежде чем начать рассмотрение примеров, необходимо настроить установленную библиотеку TCPDF.

Конфигурирование в UNIX-системах

Если TCPDF устанавливается в UNIX®-системе, необходимо убрать со всех файлов флаг исполнения, возникший как побочный эффект от создания архива TCPDF в операционной системе Microsoft® Windows®. К счастью, это легко можно сделать при помощи пары команд, показанных в листинге 1. Также необходимо проследить за тем, чтобы каталоги cache и images были доступны для записи, поскольку в них хранятся временные файлы TCPDF.

Следующим шагом необходимо назначить владельцев файлов (пользователя и группу). Как правило, это пользователь www и группа www, хотя в некоторых системах имена могут быть другими. Если вы запускаете TCPDF на своем собственном Web-сайте (часто в этом случае домашним каталогом является каталог public_html), этот шаг можно пропустить.

Листинг 1. Назначение прав доступа к папке и указание ее владельца

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

Общие настройки для всех операционных систем

Откройте в любом текстовом редакторе файл config/tcpdf_config.php. В этом файле содержатся конфигурационные параметры TCPDF, с помощью которых можно управлять работой этой библиотеки, а также указывать, где она должна искать вспомогательные файлы.

В файле tcpdf_config.php содержатся следующие параметры, которые вы, возможно, захотите изменить.

  • PDF_PAGE_FORMAT . Задайте для этого параметра значение letter , если вы не используете метрические форматы страниц. Скорее всего, TCPDF поддерживает более широкий набор размеров страниц, чем ваш принтер, если, конечно, вы не работаете с чем-то очень экзотическим.
  • PDF_UNIT . Задайте для этого параметра значение pt , если вам удобнее выполнять разметку PDF-документа не в миллиметрах, а в пунктах.
  • PDF_CREATOR , PDF_AUTHOR . Создатель и автор документа по умолчанию (на тот случай, если вы забудете указать эти сведения в коде генерации PDF-документа).

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

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

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

Создание счета

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

Давайте создадим Web-страницу со счетом, чтобы пользователи могли видеть, какие товары они заказали и сколько они стоят.

Первая версия: Web-страница

В моей любимой среде PHP я создал папку Invoice и поместил в нее следующие файлы.

  • Invoice.php – PHP-код для создания счета.
  • Invoice.css – CSS-стили для счета.
  • Azuresol_OnyxTree-S.png – изображение «OnyxTree S» (автор Azuresol), которое будет использоваться в качестве логотипа компании (бесплатная пиктограмма, найденная на Web-сайте iconfinder.com, см. раздел Ресурсы).
  • gentleface_print.png – изображение «Print» (автор gentleface), которое будет служить для запуска генерации PDF-документа (еще одна бесплатная пиктограмма с сайта iconfinder.com).

В файле Invoice.php проверяется, был ли при обращении к странице передан аргумент PDF или нет (листинг 2). Если аргумент PDF не был передан, пользователь попадает на обычную Web-страницу, которая в этом случае отображается с помощью функции generateHTML (листинг 3). Функция generatePDF будет рассмотрена чуть позже, но нетрудно предположить, что она будет использоваться для генерации PDF-версии страницы счета.

Листинг 2. Проверка режима создания страницы

В массиве $invoiceData содержатся все данные о счете; этот массив создается непосредственно в файле Invoice.php, но можно представить, что мы получаем информацию из базы данных, от Web-сервиса или в виде содержимого корзины какого-нибудь Интернет-магазина.

Листинг 3. Генерация HTML

Для краткости я убрал из листинга 3 весь HTML-код. Этот код присутствует в файле Invoice.php, который находится в архиве CreatingPDFs-Invoice.zip (см. раздел Загрузка).

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

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

Рисунок 1. Web-страница счета во всей красе

Моя полностью вымышленная компания South Seas Pacifica занимается поставками чая и кофе, и, по всей видимости, особенно любит суматранские сорта. По крайней мере, их цены достаточно привлекательны!

Значок принтера в правом нижнем углу страницы позволяет получить печатную форму счета. Здесь вступает в дело TCPDF. Нашим покупателям не придется распечатывать Web-страницу, потому что мы создадим для них аккуратную PDF-версию, которую и можно будет без труда распечатать.

Вторая версия: PDF-документ

Теперь, когда у нас есть аккуратная Web-страница, необходимо создать ее PDF-версию, предназначенную для печати.

Вспомните листинг 2, из которого видно, что при передаче в загружаемую страницу Invoice.php аргумента PDF (http://. /Invoice.php?PDF) выполняется функция generatePDF , обрабатывающая те же самые данные (см. листинг 4).

Листинг 4. Генерация счета в PDF-формате

Функция generatePDF создает объект InvoicePdf , вызывает на исполнение его метод CreateInvoice , а затем выводит PDF-документ под именем Your_Invoice.pdf в браузер пользователя. Все это выглядит предельно просто, если не учитывать тот факт, что мне пришлось создать класс InvoicePdf самостоятельно, дублируя исходный стиль Invoice. Сейчас я объясню, как я это сделал.

Класс InvoicePdf расширяет класс TCPDF библиотеки TCPDF, являющийся главным механизмом генерации PDF-документов. С помощью переданных аргументов $orientation (ориентация страницы), $unit (единица измерения) и $format (размер страницы) в конструкторе выполняется инициализация родительского класса (см. листинг 5). Последние три аргумента конструктора TCPDF говорят о том, что ввод данных выполняется в формате Unicode (по умолчанию значение true), PDF-документ создается в кодировке UTF-8, кэширование на диске не используется (по умолчанию значение false). При использовании кэширования на диске на генерацию PDF-документа затрачивается меньше оперативной памяти, но уходит больше времени. Поскольку наш документ небольшой и достаточно простой, мы не получим никаких преимуществ от использования кэширования.

После инициализации родительского класса ссылка на содержимое счета сохраняется для последующего использования. Далее с помощью метода SetMargins задаются отступы страницы: 72 пункта слева и справа и 36 пунктов сверху. Последний аргумент метода SetMargins показывает, что значения отступов по умолчанию заменяются нашими собственными значениями. С помощью метода SetAutoPageBreaks мы указываем TCPDF автоматически создавать следующую страницу при достижении конца (36 пунктов от нижнего края) предыдущей.

Листинг 5. Конструктор класса InvoicePdf

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

Илон Маск рекомендует:  Шаблон сайта здоровье HTML, CSS, 5 страниц

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

Наконец, с помощью метода setLanguageArray для PDF-файла задаются некоторые зависящие от языка строки; эти строки определены в соответствующем конфигурационном файле, загружаемом из основного конфигурационного файла TCPDF.

В листинге 6 выполняется переопределение метода Header , предназначенного для генерации содержимого заголовка каждой страницы. Для этого в первую очередь необходимо определить несколько переменных. Задав значение параметра bigFont равным 14 пунктам, мы определили размер логотипа и стандартного текста относительно размера bigFont . Далее рассмотрим вызываемые методы TCPDF.

Метод ImagePngAlpha вставляет изображение с логотипом и размещает его в верхнем левом углу, отступая 72 пункта вправо и 36 пунктов вниз в соответствии с ранее определенными параметрами страницы. Поскольку это квадратное изображение, можно указать одинаковые ширину и высоту (вычисляемое значение $imageScale ). Поскольку данный метод может работать с форматами PNG и JPEG, мы указываем, что наше изображение имеет формат PNG (если при установке PHP была установлена библиотека GD, можно загружать изображения в любом формате, поддерживаемом этой библиотекой). Далее указывается значение null, поскольку PDF-ссылка, созданная при выполнении метода AddLink и указывающая на это изображение, не добавляется. Следующее значение, T , говорит о том, что следующий объект PDF-документа должен быть нарисован в верхнем правом углу области изображения. Наконец, мы указываем TCPDF не менять размер рисунка, оригинальное разрешение которого составляет 72 точки на дюйм (стандартное разрешение экрана), и выровнять его по левому краю страницы.

Как вы видите, метод ImagePngAlpha позволяет управлять многими параметрами размещения изображений на странице PDF-документа (см. листинг 6).

Листинг 6. Генерация заголовка страницы

После добавления логотипа зададим шрифт (семейство Times bold, размер определяется в соответствии с аргументом bigFont ) и создадим несколько ячеек, в которых укажем название и адрес компании. Эти ячейки содержат текст и похожи на ячейки таблиц в HTML. Метод Cell принимает следующие аргументы (на самом деле этих аргументов гораздо больше – их полный список можно посмотреть в документации TCPDF).

  • Width – ширина ячейки. Если значением этого аргумента является 0, ячейка будет растянута на всю ширину страницы, до ее правой границы (или до левой, если используется язык с написанием справа налево).
  • Height – высота ячейки. Если значением этого аргумента является 0, ячейка будет растянута по высоте так, чтобы вместить содержимое.
  • Text – текст, отображаемый в ячейке с использованием текущих параметров шрифта и цвета.
  • Border – указывает, как рисуются границы ячейки. Мы не будем использовать границы, поэтому в качестве значения этого аргумента укажем 0. Для отображения всех границ ячейки необходимо указать значение 1, а для отображения границ с определенных сторон – строку, содержащую названия нужных сторон.
  • Position – местоположение следующей ячейки. Если задать для этого аргумента значение 1, ячейка будет расположена в начале новой строки, 0 – справа от текущей ячейки, и 2 – в новой строке под текущей ячейкой.

Наконец, метод Header рисует внизу заголовка черную линию шириной во всю страницу. На рисунке 2 показан вид заголовка в приложении Preview операционной системы Mac OS X.

Рисунок 2. Заголовок страницы для печати – точно такой же, как и заголовок HTML-страницы

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

В этом методе содержится лишь один дополнительный фрагмент кода – вызов метода SetY с отрицательным значением. Отрицательный знак Y означает, что расстояние задается от нижнего края страницы. Таким образом, мы оставляем запас места для размещения нижнего колонтитула, гарантируя, что изображение не будет расположено слишком близко к нижнему полю (см. листинг 7).

Листинг 7. Генерация нижнего колонтитула страницы

Полученная PDF-страница похожа на Web-версию счета, но не содержит значка принтера. Этот значок здесь не нужен, поскольку данная страница уже предназначена для печати. На рисунке 3 показан вид нижнего колонтитула.

Рисунок 3. Нижний колонтитул страницы для печати

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

После вызова метода AddPage для создания новой (в нашем случае единственной) страницы выберите шрифт Helvetica размером 11 пунктов и переместите место вставки данных на 144 пункта вниз от верхнего края страницы. Таким образом, между заголовком страницы и началом таблицы останется небольшое расстояние.

Далее вычислите все необходимые расстояния, чтобы расположить таблицу по центру страницы. Для этого необходимо учесть ширину страницы, ширину двух отступов (72 пункта каждый), а также наличие одного широкого и трех обычных столбцов самой таблицы.

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

Все строки, содержащие позиции заказа, обрабатываются поочередно с помощью оператора foreach (см. листинг 8).

Листинг 8. Генерация содержимого страницы

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

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

Рисунок 4. Заказанные позиции

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

Заключение

В этой статье вы познакомились с TCPDF – популярной библиотекой языка PHP, предназначенной для создания PDF-документов. TCPDF не требует подключения внешних библиотек, что существенно упрощает ее установку на существующие Web-сайты на основе PHP. Я продемонстрировал основы установки и конфигурирования TCPDF в UNIX-системах. После этого была создана простая Web-страница Интернет-магазина, специализирующегося на экзотических горячих напитках.

Имея Web-страницу, которая выглядит, как профессиональный счет, мы расширили класс TCPDF , чтобы сгенерировать PDF-версию счета, которую можно без труда загрузить или распечатать. Переопределение методов Header и Footer позволило настроить привычный вид страницы, а написание дополнительного метода – расположить позиции заказа в виде таблицы.

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

  • этот контент в PDF
  • Пример для этой статьи (os-tcpdf-CreatingPDFs-Invoice.zip | 21 КБ)

Похожие темы

  • Оригинал статьи: Create PDFs on the fly using TCPDF (EN).
  • Посетите Web-сайт TCPDF.org (EN).
  • Статья Generate PDF files from Java applications dynamically (EN) познакомит вас с библиотекой iText. Кроме того, в этой статье представлено пошаговое руководство по использованию iText для создания PDF-документов в приложениях, использующих технологию Java.
  • Для поиска бесплатных пиктограмм для создания логотипа компании и значка принтера я использовал ресурс Iconfinder (EN). Этот сайт содержит большое количество высококачественных пиктограмм, сгруппированных по размеру и возможности использования в коммерческих целях.
  • Статья Getting started with the Eclipse Platform (EN) раскрывает историю создания и содержит обзор среды разработки Eclipse, включая подробное описание установки среды и разработанных для нее плагинов.
  • Загрузите проект TCPDF (EN) с Web-сайта Sourceforge.net.
  • Для написания кода в этой статье использовалась интегрированная среда разработки Eclipse (EN).
  • Загрузите инструментарий разработчика PHP Development Tools for Eclipse (EN).
  • Загрузите MAMP Pro (EN) – пакет приложений для операционной системы Mac OS X, включающий в себя Apache, MySQL и PHP.
  • В документации Lotus Connections documentation (EN) содержится документация по продукту, а также ссылки на другие ресурсы для поддерживаемых версий Lotus Connections.
  • Посетите раздел Open source портала developerWorks, содержащий обширную справочную информацию, инструменты и обновления проектов, а также самые популярные среди наших читателей статьи и руководства (EN), которые помогут вам в разработке и использовании open source технологий в продуктах IBM.
  • Ознакомительные версии программного обеспечения IBM (EN): загрузите ознакомительные версии или поработайте в онлайновом режиме в среде IBM SOA Sandbox, чтобы ознакомиться с инструментами для разработчиков и приложениями промежуточного уровня семейств DB2®, Lotus®, Rational®, Tivoli® и WebSphere®.

Комментарии

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

Сохраняем значения кастомной формы в PDF файл

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

Как всегда, все делаем на примере. У меня есть базовая форма, которая состоит из 3х полей:

Я опускаю, как создавать простейшие формы, ибо все это уже проходили.

Ну или код модуля, файл custom_form.module:

По сабмиту, у нас естественно ничего не происходит. Теперь к самому интересному, как создать PDF документ. PHP из коробки не умеет работать с PDF документами, только с подключением дополнительных библиотек. Библиотек очень большое количество, а действительно адекватно работающих не так уж и много. Я перепробовал их огромное количество и для себя выбрал 2:

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

Теперь в сабмите подключим данную библиотеку

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

Ну а дальше по коду и комментариям должно быть все понятно

Хочу заметить, что данный файл в БД, будет сохраняться в течении нескольких часов, ибо статус у него 0, если же вам нужно сохранить его навсегда, то меняем на 1.

Файл модуля custom_form.module

Сам готовый модуль, используемый в примере можно скачать здесь. По всем остальным вопросам — как всегда в комментариях.

Хочу заметить, что вместе с модулем идет и библиотека TCPDF, отсюда и вес в 17mb.

Что такое код pdf_begin_template

(PHP 4 >= 4.0.5, PECL)

pdf_begin_template — Starts new template

Description int pdf_begin_template ( resource pdfdoc, float width, float height )

Start a new template definition.

Пред. Начало След.
pdf_begin_pattern Уровень выше pdf_circle

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL