Создание PDF-файлов с помощью PHP и 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 и включить в программу. Например, вот так
-
require('fpdf.php');
Ниже пример использования библиотеки для генерации простого PDF.
Мы создадим новый объект FPDF:
-
$pdf = new FPDF();
Конструктор FPDF принимает следующие параметры
- Ориентация страницы (P or L) книжная или альбомная
- Размерность (pt,mm,cm или in)
- Размер документа (A3, A4, A5, Letter and Legal)
Далее мы установим некоторые свойства документа
-
$pdf->SetAuthor('Some Author');
-
$pdf->SetTitle('FPDF tutorial');
Так как в данном примере мы используем одинаковый шрифт для всего документа, мы устанавливаем его до создания страницы
-
$pdf->SetFont('Helvetica', 'B', 20);
-
$pdf->SetTextColor(50, 60, 100);
У функции SetFont 3 параметра; название шрифта, стиль и размер. Мы используем Helvetica, жирный и 20 пунктов, мы будем использовать его для заголовка документа.
Вы можете использовать любой другой шрифт, используя функцию AddFont.
Используя функцию SetTextColor, мы устанавливаем цвет шрифта для всего документа. Цвет может быть представлен в RGB или grey scale. В данном примере мы используем RGB-значения.
Теперь когда главное сделано, приступим к созданию страниц.
-
$pdf->AddPage('P');
-
$pdf->SetDisplayMode('real', 'default');
В функцию AddPage() можно передать параметры "P" или "L" для указания ориентации страницы. Функция SetDisplayMode определяет как будет отображена страница. Вы можете определить параметры увеличения и разметки. В примере мы используем 100% увеличение и разметку по умолчанию, определенную в программе, используемой для просмотра.
Сейчас, когда у нас есть страница, давайте вставим в нее изображение для того чтобы сделать страницу приятней, также мы добавим ссылку. Мы отобразим логотип FPDF используя функцию Image и передадим в нее следующие параметры — название файла, размерность и адрес.
-
$pdf->Image('logo.png', 10, 20, 33, 0, ' ', 'http://www.fpdf.org/');
Для того чтобы добавить ссылку воспользуемся следующей командой
-
$pdf->Link(10, 20, 33, 33, 'http://www.fpdf.org/');
Сейчас создадим заголовок с рамкой
-
$pdf->SetXY(50, 20);
-
$pdf->SetDrawColor(50, 60, 100);
-
$pdf->Cell(100, 10, 'FPDF Tutorial', 1, 0, 'C', 0);
Функция SetXY устанавливает x и y координаты точки, в которой мы хотим вывести заголовок. SetDrawColor устанавливает цвет границы, используя значения RGB. После этого мы вызываем функцию Cell для вывода прямоугольника с текстом нашего заголовка. Мы передаем в функцию следующие параметры: ширина, высота, текст, граница, ln, выравнивание и заполнение. Значение границы 0 - отсутствие границы или 1 для наличия границы. Для ln мы используем значение по умолчанию 0, "C" - выравнивание текста по центру и 0 для параметра заполнение. Если мы бы установили последний параметр в 1 наш прямоугольник был бы закрашен, значение 0 оставит его прозрачным.
Теперь мы хотим написать маленький текст в наш документ
-
$pdf->SetXY(10, 50);
-
$pdf->SetFontSize(10);
-
$pdf->Write(5, 'Congratulations! You have generated a PDF. ');
Итак снова мы устанавливаем координаты вывода текста x и y, но теперь мы уменьшим размер шрифта, используя SetFontSize. Функция Write напечатает текст в наш документ. Параметр 5 устанавливает высоту, он имеет смысл только тогда когда у нас есть много строк в нашем тексте.
В конце мы выведен наш результат, используя функцию Output.
-
$pdf->Output('example1.pdf', 'I');
Здесь мы указали имя файла и параметры вывода, в данном случае "I". "I"-параметр выведет результат в браузер.
Итак полный текст:
-
require('fpdf.php');
-
-
// create a FPDF object
-
$pdf = new FPDF();
-
-
// set document properties
-
$pdf->SetAuthor('Some Author');
-
$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 {
-
$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');
-
} // Header
-
-
function Footer() {
-
$this->SetXY(100,-15);
-
$this->SetFont('Helvetica','I',10);
-
$this->Write (5, 'This is a footer');
-
} // Footer
-
} // class PDF
-
-
$pdf = new PDF();
-
$pdf->AddPage();
-
$pdf->Output('example2.pdf', 'D');
Как вы видите мы создали дочерний класс, используя наследование и создания функций Header и Footer. Затем мы создали новый объект и добавили страницу в документ. Функция AddPage автоматически вызовет функции Header и Footer. В конце мы вывели полученную информацию в файл с названием example2.pdf, используя значение "D". В этом случае браузер предложит сохранить данный файл.
Итак, мы изучили основы создания PDF-документов, для более подробной информации используйте FPDF Web site.
Русская версия документации ZIP и TGZ.
Русский язык и Unicode
В случае необходимости использования Unicode советую обратить внимание на форк FPDF - TCPDF (альтернативный адрес).
Автор перевода: great_boba
Правка и дополнения: Filosoff


February 22nd, 2008 at 10:05 Quote
вообще либа хорошая, но не безгеммороиная, особенно с позиционированием картинок и табличным выводом. Там где не планируется нагрузка, пытаюсь всеже использовать htmldoc. Способ тормозной, но зато очень простой.
February 22nd, 2008 at 12:42 Quote
Либа хороша (да ещё шрифты в комплекте), я ещё года два назад её использовал для генерации отчётов в PDF. :-)
April 17th, 2008 at 07:32 Quote
А не могли бы Вы подсказать - как решить проблему с Русским языком в title pdf-документа , который можно просмотреть через свойства документа?