Все ленты — последние статьи

Создаем документ PDF из PHP скрипта с помощью библиотеки FPDF

Создаем документ PDF из PHP скрипта с помощью библиотеки FPDF

В данном уроке показано, как использовать бесплатную библиотеку FPDF для генерации PDF документа из PHP скрипта.

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

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

В данном уроке мы создадим прекрасный 2-х страничный документ PDF с помощью PHP. Мы будем использовать библиотеку FPDF.

Вот что должно в конечном итоге получиться:

PDF документPDF документ

Установка FPDF

 

Для использования FPDF нужно установить его на сайт. Скачайте архив FPDF и распакуйте его в папку fpdf, которую надо создать в папке вашего сайта.
Начинаем писать скрипт PHP

Теперь у вас есть установленный FPDF и можно начать писать скрипт PHP для генерации отчета в формате PDF. Создаем файл report.php в той же папке, где вы создали папку fpdf и открываем его в текстовом редакторе.

Первое, что нужно сделать — включить библиотеку FPDF. Библиотека называется fpdf.php и располагается в папке fpdf:
1 <?php
2
3 require_once( "fpdf/fpdf.php" );

Теперь добавим несколько переменных для конфигурации:
01 // Начало конфигурации
02
03 $textColour = array( 0, 0, 0 );
04 $headerColour = array( 100, 100, 100 );
05 $tableHeaderTopTextColour = array( 255, 255, 255 );
06 $tableHeaderTopFillColour = array( 125, 152, 179 );
07 $tableHeaderTopProductTextColour = array( 0, 0, 0 );
08 $tableHeaderTopProductFillColour = array( 143, 173, 204 );
09 $tableHeaderLeftTextColour = array( 99, 42, 57 );
10 $tableHeaderLeftFillColour = array( 184, 207, 229 );
11 $tableBorderColour = array( 50, 50, 50 );
12 $tableRowFillColour = array( 213, 170, 170 );
13 $reportName = "2009 Widget Sales Report";
14 $reportNameYPos = 160;
15 $logoFile = "widget-company-logo.png";
16 $logoXPos = 50;
17 $logoYPos = 108;
18 $logoWidth = 110;
19 $columnLabels = array( "Q1", "Q2", "Q3", "Q4" );
20 $rowLabels = array( "SupaWidget", "WonderWidget", "MegaWidget", "HyperWidget" );
21 $chartXPos = 20;
22 $chartYPos = 250;
23 $chartWidth = 160;
24 $chartHeight = 80;
25 $chartXLabel = "Product";
26 $chartYLabel = "2009 Sales";
27 $chartYStep = 20000;
28
29 $chartColours = array(
30 array( 255, 100, 100 ),
31 array( 100, 255, 100 ),
32 array( 100, 100, 255 ),
33 array( 255, 255, 100 ),
34 );
35
36 $data = array(
37 array( 9940, 10100, 9490, 11730 ),
38 array( 19310, 21140, 20560, 22590 ),
39 array( 25110, 26260, 25210, 28370 ),
40 array( 27650, 24550, 30040, 31980 ),
41 );
42
43 // Конец конфигурации

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

Различные цвета, которые используются в отчете. Каждый цвет задается как массив из трех элементов, который содержит значения для красного, зеленого и голубого цветов (в диапазоне 0-255).
Заголовок отчета ("2009 Widget Sales Report") и его положение.
URL и размеры изображения логотипа компании. Данное изображение используется на титульной странице отчета.
Метки строк и столбцов для данных отчета. Используются при выводе таблицы и диаграммы в отчете.
Конфигурация для графика. Включает положение графика, размеры, метки на осях, значения шага, которое используется для шкалы по оси Y.
Цвета, которые используются для столбцов графика. Также как и для других цветов, они задаются массивами из трех элементов. В отчете используется 4 цвета для столбцов графика: по одному для каждого столбика.
Данные для отчета. Это двумерный массив, который содержит 4 строки, по одной для каждого вида продукта.

Создаем титульную страницу

Теперь можно приступить к построению PDF. Сначала создаем титульную страницу отчета. Оно содержит логотип компании и название отчета, расположенные по центру страницы.
Создаем объект FPDF

Сначала нужно создать новый объект FPDF, который будет содержать данные PDF. Конструктор FPDF принимает 3 аргумента:

Ориентация страницы. Используйте 'P' для книжной ориентации страницы, или 'L' для альбомного расположения листа. По умолчанию используется 'P'.
Единицы, которые используются для измерений на странице. Используйте 'pt', 'mm', 'cm', или 'in'. По умолчанию используется 'mm'.
Формат страницы. Возможные значения: 'A3', 'A4', 'A5', 'Letter', и 'Legal'. Или вы можете задать пользовательские значения для ширины и высоты в двумерном массиве. По умолчанию используется 'A4'.

Например, устанавливаем книжную ориентацию страницы, миллиметры в качестве единиц измерения и формат A4:
1 /**
2 Создаем титульную страницу
3 **/
4
5 $pdf = new FPDF( 'P', 'mm', 'A4' );
Устанавливаем цвет текста

Теперь установим цвет текста на странице. Делаем это с помощью метода FPDF SetTextColor(), передавая ему значения для красного, зеленого и синего цветов (каждое значение лежит в диапазоне 0-255). Используем значения цветов в массиве $textColour, который был создан в разделе конфигурации:
1 $pdf->SetTextColor( $textColour[0], $textColour[1], $textColour[2] );
Создаем страницу

Теперь мы готовы создать новую пустую страницу в документе PDF с помощью вызова метода FPDF AddPage():
1 $pdf->AddPage();
Добавляем изображение логотипа

FPDF позволяет просто вставлять изображения на страницу. Нужно вызвать метод Image() со следующими аргументами:

Путь к файлу с изображением. Это может быть абсолютный путь, или относительный к скрипту PHP script. Также можно использовать URL.
Положение X и Y левого верхнего угла изображения на странице документа PDF. Если опустить данные аргументы, то будет использована текущая позиция.
Ширина и высота изображения в документе PDF. Если опустить оба значения, то будут использовать оригинальные размеры изображения (при 72 DPI). Если опустить одно значение, то другое будет вычисляться автоматически.
Тип изображения. Допустимые значения включают: 'JPEG', 'PNG' и 'GIF'(в верхнем или нижнем регистре при написании). Если опустить данное значение, то FPDF будет распознавать формат по расширению имени файла.
URL ссылки для изображения. Указывается опционально — если указан URL, то изображение становится ссылкой, которая воспринимает нажатия кнопки мыши.

Все величины, такие позиция X и Y, высота и ширина, используют единицы измерения, указанные при создании документа PDF (в данном случае миллиметры).

Вы можете создать ваше собственное изображение логотипа (нужно использовать разрешение 300 DPI) или использовать изображение из исходников. Сохраните изображение в той же папке, что и скрипт PHP, а затеем вставьте изображение в документ PDF с помощью следующей команды:
1 // Логотип
2 $pdf->Image( $logoFile, $logoXPos, $logoYPos, $logoWidth );
Устанавливаем шрифт

FPDF позволяет установить шрифт, стиль и размер для текста в документе PDF. Для этого используется метод SetFont() со следующими аргументами:

Семейство шрифтов. Вы можете использовать следующие стандартные имена для семейств шрифтов: 'Courier', 'Helvetica', 'Arial', 'Times', 'Symbol', или 'ZapfDingbats'.
Стиль шрифта. Можно использовать: '' (обычный), 'B' (полужирный), 'I' (курсив), и 'U' (подчеркнутый). Можно использовать комбинации опций — например, 'BU' для полужирного подчеркнутого текста.
Размер шрифта. Указывается в пунктах (по умолчанию используется значение 12 пунктов).

Для названия отчета на титульной странице используем шрифт Arial Bold размером 24 пункта:
1 // Название отчета
2 $pdf->SetFont( 'Arial', 'B', 24 );

Можно импортировать любой шрифт TrueType или Type 1 с помощью метода AddFont(). Для более подробных сведений надо почитать руководство по FPDF .
Добавляем текст

Теперь можно добавить название отчета. Объект FPDF использует концепцию "текущая позиция", куда вставляется следующая часть текста или другой элемент. Так как нужно, чтобы название отчета располагалось в середине страницы, необходимо передвинуть текущую позицию вниз к данной точке, которая располагается на расстоянии 160мм от верха страницы (значение хранится в конфигурационной переменной $reportNameYPos ). Для этого используется метод FPDF Ln(), который добавляет перевод строки на указанное расстояние:
1 $pdf->Ln( $reportNameYPos );

Если не указать высоту перевода строки, то будет использоваться высота последней выведенной ячейки.

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

Cell() принимает следующие аргументы (все являются опциональными):

Высота и ширина ячейки. По умолчанию ширина растягивается до правого поля, а высота устанавливается в 0.
Строка текста для вывода. По умолчанию ''.
Указание для отображения рамки вокруг ячейки. Это может быть либо число (0=нет рамки, 1=рисуем рамку), или строка с одним или несколькими параметрами из следующего списка: 'L' (слева), 'T' (сверху), 'R' (справа), и 'B' (внизу). Значение по умолчанию: 0.
Куда помещать текущую позицию после вывода ячейки. Значение может быть 0 (справа от ячейки), 1 (начало следующей строки), или 2 (ниже). Значение по умолчанию: 0.
Выравнивание текста. Возможные значения: 'L' (выравнивание по левому краю), 'C' (выравнивание по центру), или 'R' (выравнивание по правому краю). Значение по умолчанию: 'L'.
Нужно ли заливать фон ячейки цветом. true = заливаем цветом, false = оставляем фон прозрачным. Значение по умолчанию: false.
URL ссылки. Если задан, то ячейка с текстом становится рабочей ссылкой на другой ресурс.

Теперь с помощью метода Cell() вставим название отчета и выровняем его по центру:
1 $pdf->Cell( 0, 15, $reportName, 0, 0, 'C' );
Создаем колонтитул страницы и вводный текст

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

Сделаем колонтитул страницы. Добавим новую страницу, затем выведем текст колонтитула, который содержит название отчета, выровнен по центру страницы и использует шрифт Arial размером 17. Используем переменную конфигурации $headerColour для установки цвета текста:
1 $pdf->AddPage();
2 $pdf->SetTextColor( $headerColour[0], $headerColour[1], $headerColour[2] );
3 $pdf->SetFont( 'Arial', '', 17 );
4 $pdf->Cell( 0, 15, $reportName, 0, 0, 'C' );

Теперь перейдем к тексту. Сначала выведем заголовок в обычном цвете и шрифтом Arial размером 20. Так как нам не нужно центрировать текст, можно использовать простой метод Write(), передав ему высоту строки и текст для вывода (в качестве опции можно также передать адрес URL для формирования ссылки):
1 $pdf->SetTextColor( $textColour[0], $textColour[1], $textColour[2] );
2 $pdf->SetFont( 'Arial', '', 20 );
3 $pdf->Write( 19, "2009 Was A Good Year" );

Теперь можно вывести текст введения шрифтом Arial размером 12. Здесь есть пропуски 16 мм от первого абзаца и 12 мм между параграфами. Задаем для каждой строки высоту в 6 мм:
1 $pdf->Ln( 16 );
2 $pdf->SetFont( 'Arial', '', 12 );
3 $pdf->Write( 6, "Despite the economic downturn, WidgetCo had a strong year. Sales of the HyperWidget in particular exceeded expectations. The fourth quarter was generally the best performing; this was most likely due to our increased ad spend in Q3." );
4 $pdf->Ln( 12 );
5 $pdf->Write( 6, "2010 is expected to see increased sales growth as we expand into other countries." );

Метод Write() автоматически переводит текст на следующую строку, когда он достигает правой стороны страницы.
Добавляем данные

Теперь нужно добавить таблицу с данными ниже текста. сначала установим цвет рамки таблицы. Метод SetDrawColor()устанавливает цвет, который используется для рамок и других линий, так что мы можем использовать его для установки цвета для рамок ячеек таблицы. Затем текущую позицию опускаем вниз на 15мм для создания пробела между текстом и таблицей:
1 $pdf->SetDrawColor( $tableBorderColour[0], $tableBorderColour[1], $tableBorderColour[2] );
2 $pdf->Ln( 15 );
Создаем строку заголовков таблицы

Таблица имеет строку, которая содержит в ячейках заголовки столбцов "PRODUCT", "Q1, "Q2", "Q3", и "Q4". Ячейка "PRODUCT" использует отличный от других заголовков цвет текста и фона.

Мы уже пользовались методом SetTextColor()для установки цвета текста. Для установки цвета фона надо использовать метод SetFillColor(), который имеет такие же аргументы как SetTextColor().

Чтобы создать ячейки таблицы используется метод Cell(), которому задаются ширина и высота ячейки, содержание и выравнивание. Также передается 1 в качестве 4-го аргумента для установки рамки, и true в качестве 7-го аргумента для заполнения фона установленным цветом.

Ниже приведен код для создания строки заголовков. Сначала устанавливается полужирный шрифт. Затем создается ячейка "PRODUCT" с соответствующим текстом и фоном. Затем устанавливается цвет для оставшихся 4 ячеек заголовков, и выполняется цикл по элементам массива $columnLabels для вывода ячеек с выравниванием текста в них по центру:
01 // Создаем строку заголовков таблицы
02 $pdf->SetFont( 'Arial', 'B', 15 );
03
04 // Ячейка "PRODUCT"
05 $pdf->SetTextColor( $tableHeaderTopProductTextColour[0], $tableHeaderTopProductTextColour[1], $tableHeaderTopProductText
06 Colour[2] );
07 $pdf->SetFillColor( $tableHeaderTopProductFillColour[0], $tableHeaderTopProductFillColour[1], $tableHeaderTopProductFill
08 Colour[2] );
09 $pdf->Cell( 46, 12, " PRODUCT", 1, 0, 'L', true );
10
11 // Остальные ячейки заголовков
12 $pdf->SetTextColor( $tableHeaderTopTextColour[0], $tableHeaderTopTextColour[1], $tableHeaderTopTextColour[2] );
13 $pdf->SetFillColor( $tableHeaderTopFillColour[0], $tableHeaderTopFillColour[1], $tableHeaderTopFillColour[2] );
14
15 for ( $i=0; $i<count($columnLabels); $i++ ) {
16 $pdf->Cell( 36, 12, $columnLabels[$i], 1, 0, 'C', true );
17 }
18
19 $pdf->Ln( 12 );

Пробел в начале содержимого ячейки "PRODUCT" помогает сформировать отступ в ячейке таблицы от левой границы. Такой же трюк будет использоваться для наименований продуктов в крайнем левом столбце (к сожалению, пока нет способа контролировать отступ в ячейках с помощью FPDF).
Создаем строки с данными

Остальная таблица состоит из 4 строк с данными продаж (по одной строке на продукт) для 4-х кварталов. Сначала определим пару переменных:
1 // Создаем строки с данными
2
3 $fill = false;
4 $row = 0;

Переменные служат для:

$fill: Заполнять фон ячейки цветом или нет. Мы будем переключать данное значение после вывода каждой строки для получения эффекта зебры в таблице.

$row: Текущий номер строки. Она позволяет выводить соответствующий номер для каждой строки при перемещении по таблице.

Теперь можно организовать цикл по элементам массива $data с помощью foreach для вывода строк Для каждой строки создаем левую ячейку, которая содержит название продукта, и четыре ячейки с данными. Устанавливаем соответствующие цвета для тескта и фона для каждой ячейки.

Для вывода ячеек данных используется цикл for для прохода по четырех элементному массиву с данными, а для вывода данных в формате с разделением тысяч вызываем функцию PHP number_format().

После вывода строки увеличиваем переменную $row, переключаем переменную $fill, и используем Ln() для перехода к началу следующей строки.

Вот код всего цикла:
01 foreach ( $data as $dataRow ) {
02
03 // Создаем левую ячейку с заголовком строки
04 $pdf->SetFont( 'Arial', 'B', 15 );
05 $pdf->SetTextColor( $tableHeaderLeftTextColour[0], $tableHeaderLeftTextColour[1], $tableHeaderLeftTextColour[2] );
06 $pdf->SetFillColor( $tableHeaderLeftFillColour[0], $tableHeaderLeftFillColour[1], $tableHeaderLeftFillColour[2] );
07 $pdf->Cell( 46, 12, " " . $rowLabels[$row], 1, 0, 'L', $fill );
08
09 // Создаем ячейки с данными
10 $pdf->SetTextColor( $textColour[0], $textColour[1], $textColour[2] );
11 $pdf->SetFillColor( $tableRowFillColour[0], $tableRowFillColour[1], $tableRowFillColour[2] );
12 $pdf->SetFont( 'Arial', '', 15 );
13
14 for ( $i=0; $i<count($columnLabels); $i++ ) {
15 $pdf->Cell( 36, 12, ( '$' . number_format( $dataRow[$i] ) ), 1, 0, 'C', $fill );
16 }
17
18 $row++;
19 $fill = !$fill;
20 $pdf->Ln( 12 );
21 }
Создаем график

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

Сначала надо вычислить масштаб для осей X и Y. Для масштаба по оси X вычисления заключаются в простом делении количества продуктов на желаемую ширину графика (нужно учесть небольшие отступы слева и справа для лучшего вида):
1 /***
2 Создаем график
3 ***/
4
5 // Вычисляем масштаб по оси X
6 $xScale = count($rowLabels) / ( $chartWidth — 40 );

Для вычисления масштаба по оси Y нужно найти общее значение по каждому продукту и затем определить среди них максимальное значение. Затем максимум можно будет разделить на желаемую высоту графика для получения значения масштаба по оси Y:
01 // Вычисляем масштаб по оси Y
02
03 $maxTotal = 0;
04
05 foreach ( $data as $dataRow ) {
06 $totalSales = 0;
07 foreach ( $dataRow as $dataCell ) $totalSales += $dataCell;
08 $maxTotal = ( $totalSales > $maxTotal ) ? $totalSales : $maxTotal;
09 }
10
11 $yScale = $maxTotal / $chartHeight;

Теперь, зная масштаб по оси X, можно вычислить ширину (в мм) каждого столбца графика. Это инверсированное значение масштаба по оси X, уменьшенное в полтора раза для организации расстояния между столбцами:
1 // Вычисляем ширину столбцов
2 $barWidth = ( 1 / $xScale ) / 1.5;
Добавляем линии осей и метки на них

Теперь можно добавить линии осей X и Y, метки данных и метки осей. Используем шрифт Arial с размером 10 для меток данных.

Для вывода линии в FDPF используется метод Line(), которые принимает четыре аргумента: координаты X и Y начала линии, и координаты X и Y конца линии.

Для оси X выводим горизонтальную линию вдоль низа графика, оставляя 30 мм для меток по оси Y слева. Затем выводим каждое имя продукта в массиве $rowLabels как текстовую ячейку в соответствующую точку:
01 // Добавляем оси:
02
03 $pdf->SetFont( 'Arial', '', 10 );
04
05 // Ось X
06 $pdf->Line( $chartXPos + 30, $chartYPos, $chartXPos + $chartWidth, $chartYPos );
07
08 for ( $i=0; $i < count( $rowLabels ); $i++ ) {
09 $pdf->SetXY( $chartXPos + 40 + $i / $xScale, $chartYPos );
10 $pdf->Cell( $barWidth, 10, $rowLabels[$i], 0, 0, 'C' );
11 }

Метод SetXY() позволяет устанавливать текущую позицию в нужное место на странице.

Для оси Y выводим вертикальную линию слева от графика, оставляя 30 мм для меток данных по оси Y. Линию оси делаем на 8 мм больше желаемой высоты графике для того, чтобы было место для вывода метки оси. Затем организуем цикл от нуля до максимального значения данных $maxTotal, которое было определено ранее. Размер шага установлен в переменной $chartYStep (20,000). На каждом шаге выводим текущее значение выровненной вправо и короткую метку:
1 // Ось Y
2 $pdf->Line( $chartXPos + 30, $chartYPos, $chartXPos + 30, $chartYPos — $chartHeight — 8 );
3
4 for ( $i=0; $i <= $maxTotal; $i += $chartYStep ) {
5 $pdf->SetXY( $chartXPos + 7, $chartYPos — 5 — $i / $yScale );
6 $pdf->Cell( 20, 10, '$' . number_format( $i ), 0, 0, 'R' );
7 $pdf->Line( $chartXPos + 28, $chartYPos — $i / $yScale, $chartXPos + 30, $chartYPos — $i / $yScale );
8 }

Теперь можно добавить метки осей. Используем шрифт Arial полужирный с размером 12. Размещаем метку оси X ниже меток данных, а метку оси Y — наверху оси Y:
1 // Добавляем метки осей
2 $pdf->SetFont( 'Arial', 'B', 12 );
3 $pdf->SetXY( $chartWidth / 2 + 20, $chartYPos + 8 );
4 $pdf->Cell( 30, 10, $chartXLabel, 0, 0, 'C' );
5 $pdf->SetXY( $chartXPos + 7, $chartYPos — $chartHeight — 12 );
6 $pdf->Cell( 20, 10, $chartYLabel, 0, 0, 'R' );
Выводим столбцы графика

Завершающей стадией является создание самого графика. Для вывода столбцов используется метод FPDF Rect(), который выводит прямоугольник. Метод использует следующие аргументы:

Координаты X и Y верхнего левого угла прямоугольника.
Ширина и высота прямоугольника.
Стиль прямоугольника. Может иметь значения 'D' или '' (выводим обводку), 'F' (заполняем текущим цветом фона), или 'DF' / 'FD' (обводка и заполнение).

Теперь выводим столбцы. Установим переменную $xPos, которая служит для отслеживания текущей позиции по X. Зададим ей значение 40 мм с учетом расстояния для меток по оси Y и отступа для первого столбца. Теперь создадим переменную $bar, которая будет содержать номер текущего столбца. Она будет использоваться для установки цвета для столбца:
1 // Создаем столбецы
2 $xPos = $chartXPos + 40;
3 $bar = 0;

Теперь проходим циклом по массиву $data, вычисляем суммарное значение для каждой строки и выводим столбец от оси X до этого значения, масштабированного с помощью $yScale. Цвет для каждого столбца изменяется с помощью счетчика $bar, который является индексом в массиве $chartColours. После вывода текущего столбца перемещаем позицию X к началу следующего, увеличиваем счетчик $bar и продолжаем цикл:
01 foreach ( $data as $dataRow ) {
02
03 // Вычисляем суммарное значение по строке данных для продукта
04 $totalSales = 0;
05 foreach ( $dataRow as $dataCell ) $totalSales += $dataCell;
06
07 // Создаем столбец
08 $colourIndex = $bar % count( $chartColours );
09 $pdf->SetFillColor( $chartColours[$colourIndex][0], $chartColours[$colourIndex][1], $chartColours[$colourIndex][2] );
10 $pdf->Rect( $xPos, $chartYPos — ( $totalSales / $yScale ), $barWidth, $totalSales / $yScale, 'DF' );
11 $xPos += ( 1 / $xScale );
12 $bar++;
13 }

В коде используется оператор PHP деление по модулю (%) для повтора цвета столбца, если количество столбцов превышает количество элементов в массиве $chartColours.
Отправляем документ PDF браузеру

Документ PDF готов! Осталось только отправить его браузеру, чтобы пользователь мог просмотреть его или загрузить.

Для этого используется метод FPDF Output(). Он принимает два аргумента: предполагаемое имя для PDF файла и флаг назначения. Данный флаг может принимать следующие значения:

I : Выводить PDF на экран, если такая функция поддерживается браузером, иначе загружать.

D : Загружать PDF.

F : Сохранять файл в папке на сервере.

S : Возвращать данные PDF как строку.

Для нашего примера используется опция I для вывода PDF на экран, если возможно:
1 /***
2 Выводим PDF
3 ***/
4
5 $pdf->Output( "report.pdf", "I" );
6
7 ?>

Output() автоматически посылает заголовок HTTP "Content-type: application/pdf", который сигнализирует браузеру о том, что следует ожидать документ PDF.

Теперь вы готовы протестировать скрипт. Открывайте браузер и переходите на URL, где расположен скрипт, например , www.example.com/report.php. Вы должны увидеть PDF в окне браузера. Или будет выведено диалоговое окно, в котором вам будет предложено сохранить документ PDF на вашем жестком диске. Вы можете потом открыть PDF файл в программе для просмотра PDF, например, в Acrobat Reader или Preview.

Для создания PDF документа нужен только PHP и FPDF.
Заключение

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

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

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.elated.com/articles/create-nice-looking-pdfs-php-fpdf/
Перевел: Сергей Фастунов