This Might Be Useful

Создание 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 и включить в программу. Например, вот так

PHP:
  1. require('fpdf.php');

Ниже пример использования библиотеки для генерации простого PDF.
Мы создадим новый объект FPDF:

PHP:
  1. $pdf = new FPDF();

Конструктор FPDF принимает следующие параметры

  • Ориентация страницы (P or L) книжная или альбомная
  • Размерность (pt,mm,cm или in)
  • Размер документа (A3, A4, A5, Letter and Legal)

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

PHP:
  1. $pdf->SetAuthor('Some Author');
  2. $pdf->SetTitle('FPDF tutorial');

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

PHP:
  1. $pdf->SetFont('Helvetica', 'B', 20);
  2. $pdf->SetTextColor(50, 60, 100);

У функции SetFont 3 параметра; название шрифта, стиль и размер. Мы используем Helvetica, жирный и 20 пунктов, мы будем использовать его для заголовка документа.
Вы можете использовать любой другой шрифт, используя функцию AddFont.
Используя функцию SetTextColor, мы устанавливаем цвет шрифта для всего документа. Цвет может быть представлен в RGB или grey scale. В данном примере мы используем RGB-значения.
Теперь когда главное сделано, приступим к созданию страниц.

PHP:
  1. $pdf->AddPage('P');
  2. $pdf->SetDisplayMode('real', 'default');

В функцию AddPage() можно передать параметры "P" или "L" для указания ориентации страницы. Функция SetDisplayMode определяет как будет отображена страница. Вы можете определить параметры увеличения и разметки. В примере мы используем 100% увеличение и разметку по умолчанию, определенную в программе, используемой для просмотра.

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

PHP:
  1. $pdf->Image('logo.png', 10, 20, 33, 0, ' ', 'http://www.fpdf.org/');

Для того чтобы добавить ссылку воспользуемся следующей командой

PHP:
  1. $pdf->Link(10, 20, 33, 33, 'http://www.fpdf.org/');

Сейчас создадим заголовок с рамкой

PHP:
  1. $pdf->SetXY(50, 20);
  2. $pdf->SetDrawColor(50, 60, 100);
  3. $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 оставит его прозрачным.
Теперь мы хотим написать маленький текст в наш документ

PHP:
  1. $pdf->SetXY(10, 50);
  2. $pdf->SetFontSize(10);
  3. $pdf->Write(5, 'Congratulations! You have generated a PDF. ');

Итак снова мы устанавливаем координаты вывода текста x и y, но теперь мы уменьшим размер шрифта, используя SetFontSize. Функция Write напечатает текст в наш документ. Параметр 5 устанавливает высоту, он имеет смысл только тогда когда у нас есть много строк в нашем тексте.
В конце мы выведен наш результат, используя функцию Output.

PHP:
  1. $pdf->Output('example1.pdf', 'I');

Здесь мы указали имя файла и параметры вывода, в данном случае "I". "I"-параметр выведет результат в браузер.

Итак полный текст:

PHP:
  1. require('fpdf.php');
  2.  
  3. // create a FPDF object
  4. $pdf = new FPDF();
  5.  
  6. // set document properties
  7. $pdf->SetAuthor('Some Author');
  8. $pdf->SetTitle('FPDF tutorial');
  9.  
  10. // set font for the entire document
  11. $pdf->SetFont('Helvetica', 'B', 20);
  12. $pdf->SetTextColor(50, 60, 100);
  13.  
  14. // set up a page
  15. $pdf->AddPage('P');
  16. $pdf->SetDisplayMode(real, 'default');
  17.  
  18. // insert an image and make it a link
  19. $pdf->Image('logo.png', 10, 20, 33, 0, ' ', 'http://www.fpdf.org/');
  20.  
  21. // display the title with a border around it
  22. $pdf->SetXY(50, 20);
  23. $pdf->SetDrawColor(50, 60, 100);
  24. $pdf->Cell(100, 10, 'FPDF Tutorial', 1, 0, 'C', 0);
  25.  
  26. // Set x and y position for the main text, reduce font size and write content
  27. $pdf->SetXY(10, 50);
  28. $pdf->SetFontSize(10);
  29. $pdf->Write(5, 'Congratulations! You have generated a PDF.');
  30.  
  31. // Output the document
  32. $pdf->Output('example1.pdf', 'I');

Сейчас когда мы научились создавать документы, посмотрим что еще можно сделать, используя FPDF. Пример ниже показывает нам как создать верх и низ (хедер и футер :-) ) нашего документа.

PHP:
  1. require('fpdf.php');
  2. class PDF extends FPDF {
  3.   function Header() {
  4.     $this->Image('logo.png', 10, 8, 33);
  5.     $this->SetFont('Helvetica', 'B', 15);
  6.     $this->SetXY(50, 10);
  7.     $this->Cell(0, 10, 'This is a header', 1, 0, 'C');
  8.   } // Header
  9.  
  10.   function Footer() {
  11.     $this->SetXY(100,-15);
  12.     $this->SetFont('Helvetica','I',10);
  13.     $this->Write (5, 'This is a footer');
  14.   } // Footer
  15. } // class PDF
  16.  
  17. $pdf = new PDF();
  18. $pdf->AddPage();
  19. $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

· Удаление истории Internet Explorer 7
· Включение checkbox’ов для выделения файлов и папок в Explorer
· Оптимизация Windows XP
· Создание прямой ссылки на Network Connections
· Создание скриншотов в Windows Vista с сохранением всех визуальных эффектов

- Коментировать
- Trackback

3 Responses to “Создание PDF-файлов с помощью PHP и FPDF”


  1. d1pr3d Says:

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

  2. Алексей Труфанов Says:

    Либа хороша (да ещё шрифты в комплекте), я ещё года два назад её использовал для генерации отчётов в PDF. :-)

  3. Leonid Says:

    А не могли бы Вы подсказать - как решить проблему с Русским языком в title pdf-документа , который можно просмотреть через свойства документа?

Leave a Reply

code