Создание форм pdf

Создание форм pdf

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


Начнем

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

Для начала перейдите на сайт FPDF и нажмите загрузки слева. Под всеми руководствами получите zip-архив версии 1.6 (хотя с момента последнего обновления прошло некоторое время, форумы на сайте все еще довольно активны). Разархивируйте файлы; все, что вам нужно из этой папки, это файл fpdf.php и каталог шрифтов.

Давайте сделаем например «Hello, World!». чтобы ускорить процесс. Конечно, первое, что вам нужно сделать, — подключить библиотеку; затем мы создаем новый экземпляр класса FPDF.

hello_world.php

Обратите внимание, что мы передали три значения конструктору FPDF; первое — ориентация нашей страницы; в нашем случае это портрет (вы также можете сделать «L’andscape»). Следующий параметр — тип единиц, который мы хотим использовать; мы выбираем точки, потому что это то, что будут измерять шрифты; мы могли бы выбрать mm, cm или in. Наконец, у нас есть формат бумаги, который мы, очевидно, обозначили буквой; мы могли бы установить его Legal, A3, A4 или A5. Все три из этих параметров являются опциональными, их значения по умолчанию ('P', 'mm', 'A4').

Прежде чем мы начнем добавлять текст к вашему документу, нам нужно сделать две вещи: 1) добавить страницу в pdf и 2) установить шрифт.

Вы также можете использовать AddPage всякий раз, когда хотите вставить разрыв страницы; сначала мы устанавливаем тип шрифта; это может быть один из встроенных семейств шрифтов (Courier, Helvetica/Arial, Times, Symbol или ZapfDingbats) или любой добавленный с помощью метода AddFont. Далее следует формат шрифта; мы установили наш как обычный, но мы могли бы сделать «B’old», «Italic», «U’nderline» или любую комбинацию из них («BUI»). Наконец, мы устанавливаем размер шрифта в точках.

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

Так что же это делает? Первый параметр — ширина ячейки; вторая — высота. Конечно, третий — это текст для ячейки. Есть еще немало других параметров, но сначала посмотрим, как это выглядит. Чтобы закончить PDF, давайте используем метод output.

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

Создание форм pdf

Отличная работа! Вы создали свой первый PDF-файл. Вернемся к строке, которая создала текстовую ячейку и внесем изменения:

Мы добавили четвертый параметр; это граница. В нашем случае мы поставили границу вокруг. Вы можете сделать частичную границу со строкой: «LB» добавит границы слева и внизу; «TLBR» — это то же самое, что и 1.

Если вы перезагрузите страницу сейчас и обнаружите, что ничего не произошло, просто добавьте случайную строку запроса в URL-адрес, чтобы принудительно обновить содержимое.

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


Полный скринкаст


SetFillColor / SetTextColor

Вы можете заполнять текстовые ячейки цветом фона; мы увидим, как это сделать в нашем приложении, но сначала вы должны установить цвет заливки. Просто передайте этой функции значения красного, зеленого и синего (от 0 до 255). Вы можете установить цвет текста таким же образом.

Если вы хотите установить все три цвета в одно и то же значение, просто используйте один параметр.

SetLineWidth

При рисовании границы на ячейках нетрудно настроить ширину границы. Просто назовите этот метод, передав число с плавающей точкой; помните, что вы установили единицы измерения, когда вы создали экземпляр FPDF. Когда вы начинаете, границы имеют ширину 0,2 мм.

SetAuthor / SetTitle / SetSubject / SetCreator / SetKeywords

Эти методы предназначены для установки свойств PDF, метаданных. Каждый из них берет строку с соответствующим контентом. Они также могут взять необязательное логическое значение, которое определяет кодировку: true — это UTF-8, а false — ISO-8859-1.

SetMargins / SetTopMargin / SetLeftMargin / SetRightMargin

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

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

SetAutoPageBreak

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


Создание чека

Теперь, когда у нас есть понимание того, как создать PDF-файл, давайте начнем наше небольшое приложение. Мы начнем с создания HTML-формы. Когда пользователь нажимает «Отправить», мы берем значения из формы и используем их для создания квитанции для нашего клиента.

Прежде всего, небольшая оболочка HTML:

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

index.html

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

Мы добавим еще один набор полей для продуктов, которые покупает пользователь:

Я думаю, что информация, которую мы показываем здесь, подходит для таблицы, так что это то, что мы используем. Кроме того, я поставил набор квадратных скобок в конце имен инпутов; обратите внимание, что у нас есть набор инпутом с именем product[] и набор с именем price[]. Они будут размещены как массивы.

Конечно, наша форма заканчивается кнопкой отправки.

Теперь мы можем перейти к CSS. Мы не будем подробно останавливаться на этом, но здесь совсем не сложно. Вы можете поместить его в style.css, который мы используем в HTML.

style.css

Как вы можете видеть, мы придаем большинству элементов некоторый минималистский стиль. Вот как выглядит наша форма:

Создание форм pdf

Таким образом, когда ваш клиент заполняет форму и нажимает кнопку отправки, данные формы будут отправлены на файл create_receipt.php. Итак, давайте создадим файл прямо сейчас!


Генератор чеков

Сейчас мы снова вернулись к PHP. Прежде всего: подключить библиотеку:

Затем вместо создания экземпляра класса FPDF мы собираемся наследовать его на собственный класс. Это позволит нам сделать некоторые изящные вещи. Смотрите внимательно сейчас:

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

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

Эта функция будет вызываться в начале каждой страницы нашего PDF-файла. Сначала мы устанавливаем шрифт, цвет заливки и цвет текста. Затем мы выводим нашу ячейку. Обратите внимание, что мы установили ширину в 0. Это специальное значение; ячейка будет занимать все пространство справа от начальной точки (пока она не встретится с правым краем). Поскольку мы начинаем с левого поля, мы получим ячейку по всей ширине страницы (минус поля).

Теперь для функции нижнего колонтитула:

Опять же, мы начинаем с установки цвета шрифта и текста; мы не можем быть уверены в том, какими будут эти значения, когда мы перейдем к заголовку, поэтому мы поставим их для уверенности. Затем мы устанавливаем координаты X и Y. Это устанавливает верхнюю левую угловую позицию нашей следующей ячейки. Мы устанавливаем X равным 0, просто чтобы убедиться, что находимся в начале строки. Устанавливаем Y в -60; отрицательное число относится к нижней части страницы, поэтому это устанавливает наш курсор на 60 пикселей выше нижней границы страницы.

Затем мы создаем ячейку; опять же, мы используем трюк 0-ширины; мы установили высоту 20pts. Мы устанавливаем текст, придаем ему верхнюю границу и центрируем. Готово!

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

Первое, что мы сделаем, это перемещаем наш курсор; мы можем сделать это, используя метод SetY.

Это не перенесет нас вниз на 100 точек; это устанавливает 100 точек от верхней части страницы. Это не включает поля, поэтому мы на 30 пунктов ниже от нашего заголовка.

Начнем с создания ячейки шириной 100pt и 13pt с текстом «Ordered By». Затем мы удаляем шрифт, чтобы удалить полужирный шрифт. Затем мы создаем другую ячейку и передаем ей имя, которое мы получили от нашей формы. Конечно, в реальном проекте вы будете проверять эти значения перед их использованием.

Двигаясь дальше, мы добавим дату покупки:

Опять же, мы устанавливаем шрифт жирным шрифтом; после записи «Дата» мы удаляем полужирный шрифт и печатаем текущую дату, используя функцию date PHP. Указанный формат даст нам название месяца, число дней, за которым следует запятая, и четырехзначный год. Мы помещаем границу как 0 (по умолчанию), чтобы мы могли перейти к параметру линии. Мы устанавливаем его как 1, что поместит нашу позицию в начало следующей строки; это эквивалент использованию «enter» в текстовом процессоре.

Двигаемся дальше…

Функция SetX выполняет ту же функцию, что и функция SetY, за исключением того, что она передвигает нас справа. Мы ставим нашу позицию на 100 пунктов справа от левого края. Затем мы выделяем курсив и начинаем выводить адрес. Все три строки адреса имеют ширину 200pt и высоту 15 футов. Важно отметить, что наш параметр линии равен 2. Это означает, что после каждой ячейки мы перейдем к следующей строке и «вкладке», чтобы соответствовать предыдущей ячейке. Наконец, мы вызываем метод Ln, который добавляет разрыв строки. Без параметра он будет перемещать нашу позицию вниз по высоте последней отпечатанной ячейки. Мы передали ему параметр, поэтому мы движемся вниз на 100 точек.

Вот как это выглядит сейчас:


image: adress / date

Теперь давайте распечатаем таблицу продуктов, приобретенных нашим клиентом.

Мы передали их в двух массивах, которые мы получили из нашего HTML-файла. Но откуда этот метод PriceTable? Мы собираемся сделать это прямо сейчас, в рамках нашего класса PDF_receipt. Это еще одно преимущество расширения класса: мы можем уместить потенциально трудоемкую функциональность в методе.

Вот функция. Начнем с установки шрифта, цвета текста, цвета заливки и ширины линии. Затем мы настраиваем ячейки заголовка. Каждая из них имеет границу слева, сверху и справа, текст по центру и заполнение.

Затем мы удалим «bold» с шрифта и сбросим цвет заливки и ширину линии. Мы также создаем переменную $fill, заданную как false. Мы будем использовать это, чтобы добавить чередование зебры к нашей таблице.

Цикл for-loop проходит через массив продуктов и цен (они должны иметь одинаковое количество элементов, основанное на таблице в нашем HTML-файле). Мы создаем ячейку для каждой записи, помещая имя продукта под заголовком «Описание элемента» и ценой в заголовке «Цена». У них обоих есть граница. Продукт выравнивается по левому краю, цена выравнивается по правому краю. Наконец, они оба используют $fill, который в настоящее время содержит false. После каждой строки мы переключаем значение $fill на противоположное логическое значение, поэтому в следующей строке будет серый фон.

После того, как мы выведем все покупки, мы хотим отобразить общую цену. Мы удалим наш курсор на 367pt с левого края страницы. Затем мы создаем ячейку «Total», и, наконец, мы используем функцию php array_sum для добавления всех цен в $price. И это цена таблицы!

Возвращаясь к тексту нашего PDF-документа, мы теперь пропустим 50 точек.

До сих пор мы использовали функцию Cell для печати на нашей странице. Есть еще два метода, которые мы можем использовать: MultiCell и Write. Обе эти функции предназначены для строк текста, которые слишком длинные для одной ячейки полной ширины. Давайте сначала рассмотрим MultiCell.

MultiCell довольно похож на Cell, за исключением того, что когда он достигает ширины, указанной вами для ячейки, она создаст еще одну под ней и продолжит вывод. Он также сделает разрыв, когда достигнет «\n». Из-за этого ему не нужен параметр свойства линии. Он также не имеет параметра ссылки в отличие от Cell. Что? Мы еще не упоминали параметр ссылки? Итак, Cell может принять еще один параметр после параметра fill: это либо строка ссылки, либо объект ссылки, указывающий на другое место в PDF, созданное с помощью функции AddLink.

Текст не слишком важен, но слишком длинный для одной линии; плюс, в нем есть несколько разрывов строк. Хотя мы не используем их здесь, MultiCell также принимает параметры границ, выравнивания и заполнения.

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

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

На этом с PHP все. Давайте добавим еще одну функцию: мы отправим нашу форму с помощью Ajax. Перед тем, как вернуться к index.html, внесите эти изменения для вызова Output:

Первый параметр — это имя нашего файла; второй — это то, что мы хотим сделать с файлом, в этом случае сохраним его на сервере. Вы также можете принудительно загрузить с помощью «D», вернуть его как строку с «S». Значение по умолчанию, выводимое в браузер, — «I» (для встроенного).

Вернемся в HTML, давайте импортируем jQuery и добавим наш обработчик клика в кнопку отправки:

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

Вот что мы получаем

Создание форм pdf

И вот наш готовый PDF.

Создание форм pdf

И это все, ребята! Используйте комментарии для замечаний или предложений!



Источник: code.tutsplus.com


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