С каждым днем количество форматов файлов становится все больше и больше. PDF-файлы набирают или можно даже сказать что набрали свою популярность, так как он является кроссплатформенным и существует большое количество бесплатных программ с помощью которых можно просмотреть документы. Кстати немного ранее я рассматривал бесплатную и достаточно быструю программу для просмотра файлов PDF. Привилегий у этого формата большое количество и сейчас речь пойдет не об этом. Об этом формате, и об его истории Вы сможете прочесть на ВИКИпедии.
Я вам расскажу как при помощи PHP и библиотеки FPDF, создавать файлы с расширением pdf. Это могут быть какие то отчеты, или допустим вы хотите чтобы ваши страницы сайта генерировались в большую и познавательную книгу. С помощью этой библиотеки можно делать любые манипуляции, будь то вывод из базы или вывод просто текста введенного пользователем.
Немного про тот формат с которым придется иметь дело.
PDF (аббр. от Portable Document Format,) – формат электронных документов, разработанный компанией Adobe Systems. Кроссплатформенность формата создает удобные условия для организации электронного документооборота. В первую очередь предназначен для представления в электронном виде полиграфической продукции, — значительное количество современного профессионального печатного оборудования может обрабатывать PDF непосредственно. Документ в формате pdf может содержать шрифты, графику, мультимедийные элементы, что гарантирует правильное отображение независимо от операционной системы, программного обеспечения и пользовательских настроек конкретного компьютера. Именно это свойство – сохранять исходный вид и делает его привлекательным.
Достаточно популярные библиотеки PDFLib и ClibPDF требуют дополнительной настройки PHP, а класс FPDF подключается к вашим скриптам командой include() и другими командами подобного рода, при этом ненужно настраивать дополнительно серверную часть, что дает классу FPDF большое преимущество над другими подобными библиотеками.
Класс FPDF является совершенно бесплатным, его можно использовать как в коммерческих целях так и в личных.
При работе с этим классом возникают сложности с кириллическими буквами, так как FPDF был разработан иностранными разработчиками, но я постараюсь в двух словах объяснить как избавиться от этих проблем. В частности могу сказать из собственного опыта что буквы начинают наезжать друг на друга или наоборот расходиться.
Избавляемся от проблем с кириллицей
В windows в качестве шрифтов используются файлы с расширением TTF. Для того чтобы скрипты работали правильно и нормально помимо вышесказанных шрифотв нужные файлы с расширением AFM. Существует большое количество утилит позволяющих создать фалы AFM из любого кириллического шрифта. Одной из таких утилит является ttf2pt1. Суть работы данной утилиты состоит в том чтобы преобразовать шрифты TrueType (большая часть шрифтов под Windows) в формат Type1. Другими словами можно взять любой шрифт из директории С:\Windows\fonts и получить для него метрику.
Скачать утилиту ttf2pt1 можно:
- http://ttf2pt1.sourceforge.net – официальная страница ttf2pt1 на SourceForge(http://prdownloads.sourceforge.net/ttf2pt1/ttf2pt1-3.4.4.tgz – скачать можно здесь)
- http://fpdf.org/fr/dl.php?id=22 – Для Windows можно скачать на сайте FPDF
Итак я надеюсь вы уже скачали архив с утилитой. Я скачивал архив по второй ссылке. По второй ссылке Вы сможете скачать уже готовый к работе на Windows платформе файл с расширением .exe. И так по второй ссылке Вам будет предоставлен архив с exe-файлом, и файлом копирайтинга. Распакуйте архив в директорию любую, в которой Вам будет удобно использовать данную утилиту (например у меня место расположения утилиты выглядит так – D:\ttf2pt1\ttf2pt1.exe).
Итак теперь попробуем разобраться как же пользоваться данной утилитой. Скачайте какой нибудь шрифт из директории С:\Windows\fonts (например Arial).
При скачке данного шрифта получаем следующие файлы:
- arial.ttf – Arial обычный
- arialbd.ttf – Arial полужирный
- arialbi.ttf – Arial полужирный курсив
- ariali.ttf – Arial курсив
Вышеуказанные файлы шрифтов скопируйте в директорию с утилитой ttf2pt1. Теперь пришло время воспользоваться ранее скачанной утилитой ttf2pt1. Если Вы сделали как я говорил раньше(иначе говоря создали папку на диске D и поместили туда ttf2pt1.exe), то открываем командную строку Windows, для этого нужно зайти Пуск->Выполнить (как альтернативный вариант Кнопка Windows+R) и в появившемся окне написать команду cmd. Если Вы не знаете как работать с командной строкой то почитайте хелп набрав в командной строке help или воспользуйтесь файловым менеджером. В командной строке перейдите в директорию с файлом ttf2pt1.exe и наберите следующее(команды следует вводить по отдельности):
ttf2pt1 -A arial.ttf arial
ttf2pt1 -A arialbd.ttf arialbd
ttf2pt1 -A arialbi.ttf arialbi
ttf2pt1 -A ariali.ttf ariali
В этих командах:
- “ttf2pt1” – вызов программы
- “-A” – ключ, указывающий на необходимость сформировать файл AFM
- “arial.ttf”,”arialbd.ttf”,”arialbi.ttf”,”ariali.ttf “- файл True Type шрифта
- “arial”,”arialbd”,”arialbi”,”ariali” – имя будущего метрического файла (c расширение .afm)
После выполнения этих команд у вас должны появиться следующие файлы:
Теперь нужно сгенерировать файл с описанием шрифта – обычный php-файл. Вместе с FPDF поставляется скрипт makefont, который очень легко решит эту задачу.
Для начала работы с FPDF распакуйте скачанный архив (fpdf16.zip) по этому адресу – http://www.fpdf.org/en/dl.php?v=16&f=zip в любую директорию на вашем сайте.
Скрипт makefont находится в директории font/makefont/ ранее распакованного архива, и имеет имя makefont.php. В директорию fpdf/font нужно скопировать ранее полученные файлы с расширением .afm.
Чтобы использовать данный скрипт нужно:
- Создать файл например font.php, который скопировать в папку fpdf/font
- Записать в него следующие строки:
require("makefont/makefont.php"); // подключаем нужный скрипт MakeFont("arial.ttf","arial.afm","cp1251"); // запускаем нужную нам функцию MakeFont("arialbd.ttf","arialbd.afm","cp1251"); MakeFont("arialbi.ttf","arialbi.afm","cp1251"); MakeFont("ariali.ttf","ariali.afm","cp1251"); |
И естественно незабываем о <?php и ?>.
Функция MakeFont() имеет следующий формат:
MakeFont(string fontfile, string afmfile [, string enc [, array patch [, string type]]])
Здесь fontfile – это путь к шрифту(файл TTF или PFB), afmfile – путь к файлу метрики AFM, enc – имя используемой кодировки (если вы хотите работать с кириллицей то кодировка здесь будет cp1252), patch – необязательный параметр, который задает массив модификации кодировки и type – тип шрифта, True Type по умолчанию.
Список кодировок, которые можно использовать:
- cp1250 (Central Europe)
- cp1251 (Cyrillic)
- cp1252 (Western Europe)
- cp1253 (Greek)
- cp1257 (Baltic)
- ISO-8859-1 (Western Europe)
- ISO-8859-2 (Central Europe)
- ISO-8859-4 (Baltic)
- ISO-8859-4 (Cyrillic)
- ISO-8859-7 (Greek)
- ISO-8859-15 (Western Europe)
- ISO-8859-16 (Central Europe)
- KOI8-R (Cyrillic)
Теперь запускаем файл font.php на исполнение, для этого в браузере нужно ввести его полный адресс http://yourname.ua/fpdf/font/font.php. После запуска скрипта Вы должны получить файлы вида: имя_шрифта.php (например arial.php). Теперь все готово для генерации документов с русскими символами.
И да ниже на рисунках предоставлена структура папок:
Итак наконец таки мы подошли к использованию самой библиотеки FPDF.
Начало работы с FPDF
Давайте представим что нам нужно вывести на печать прайс-лист какой то фирмы.
Что должно получится в итоге:
- На прайсе должен обязательно присутствовать какой то логотип
- Естественно должен осуществляться вывод из БД, после должна на выходе получится таблица с такими полями: порядковый номер, наименование товара, цена товара, оптовая цена товара, количество товара на складе
- У документа должен быть какой то заголовок
- Название фирмы должно быть хорошо видно на прайсе, адрес, телефон
- Данные должны выводится из БД
Конечно пример небольшой, но я думаю что он достаточно неплохо продемонстрирует работу с библиотекой FPDF.
Код для создания БД с записями (не обращайте внимания на всякие глупости(говнокод), суть сейчас разобраться с библиотекой FPDF):
$db = sqlite_open("bdsql\price.db"); $query_table = sqlite_query($db, "CREATE TABLE price_ceni (id INTEGER PRIMARY KEY, name TEXT, cena TEXT, opt_cena TEXT, kol_vo TEXT);"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'So-dimm ddr2 pc-3200/4200/5300/6400 2056mb','25 u.e.','10 u.e.','125 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'SATA 40-160GB','146 u.e.','121 u.e.','1005 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'DVD-R','1595 u.e.','1220 u.e.','1725 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'Nvidia 32mb geforce4 420go','2555 u.e.','1230 u.e.','12895 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'HP 17-20v','2655 u.e.','2360 u.e.','14525 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'HP pavilion zd7000','5225 u.e.','3330 u.e.','4725 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'Matrix 15.4 *(1280*800)','22345 u.e.','1330 u.e.','12335 sht.');"); |
В качестве БД как видно из вышеприведенного кода я взял SQLite. Просто иногда на статьи очень много времени уходит, а сейчас его как никогда не хватает, поэтому не судите строго за плохой код.
Переходя к практике создания файлов-pdf с помощью FPDF, создайте файл index.php,(ранее он был показан на скриншотах структуры папок) в который разместите следующий код:
define('FPDF_FONTPATH','FPDF/font/'); // Устанавливаем путь к папке шрифтов require('FPDF/fpdf.php'); // Подключаем класс FPDF |
Чтобы вывести статическую информацию(Название фирмы, адрес, телефон, логотип, название документа) можно воспользоваться следующими методами класса FPDF:
cell():
Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, int fill [, mixed link]]]]]]])
Метод cell() выведет ячейку или другими словами прямоугольную область с заданными границами, фоновым цветом и строкой.
Параметры:
- w – Ширина ячейки
- h – Высота ячейки
- txt – Строка для вывода
- border – Граница ячейки
- ln – Текущая позиция после вывода ячейки
- align – Выравнивание текста
- fill – Фон ячейки: да (1), нет (0)
- link – URL или идентификатор, возвращенный методом AddLink()
image():
Image(string file, float x, float y [, float w [, float h [, string type [, mixed link]]]])
Метод image() Выводит изображение на страницу. Метод поддерживает два формата файлов таких как JPEG и PNG.
Параметры:
- file – Название вставляемого изображения
- x – Абсцисса верхнего левого угла
- y – Ордината верхнего левого угла
- w – Ширина изображения
- h – Высота изображения
- type – Формат изображения
- link – URL или идентификатор, возвращаемый методом AddLink()
Для начали использования методов библиотеки FPDF нужно создать экземпляр класса:
$printing = new FPDF(); $printing->Open(); |
Выше приведенные строки следует добавить в файл index.php.
Теперь нужно зарегистрировать несколько используемых шрифтов, которые Мы создали ранее:
$printing->AddFont('ArialMT','','arial.php'); $printing->AddFont('Arial-BoldMT','','arialbd.php'); $printing->AddFont('Arial-BoldItalicMT','','arialbi.php'); |
AddFont() :
AddFont(string family [, string style [, string file]])
Метод AddFont() импортирует TrueType или Type1 шрифт и делает его доступным.
Параметры:
- family – Семейство шрифта
- style -Стиль шрифта
- file Файл определения шрифта
Теперь можно со спокойной душой перейти к созданию тела документа, для нам нужно будет создать еще один дополнительный файл и назовем его printing.class.php, который будет содержать следующий код:
class Printing extends FPDF { function Title($title,$image,$company_name,$company_adres,$company_tel,$company_site) { $this->Image($image,6,6,30,20); $this->Cell(30); // выводим пустую ячейку, ширина которой 30 $this->SetFont('Arial-BoldMT','',10); // задаем шрифт, и размер шрифта $this->Cell(40,4,$company_name,0,0,'L',0); // выводим название компании $this->Cell(70); $this->SetFillColor(187,189,189); // задаем цвет заливки следующих ячеек (R,G,B) $this->Cell(50,4,$title,0,0,'C',1); // выводим наименование компании $this->ln(); // переходим на следующую строку $this->Cell(30); $this->SetFont('ArialMT','',10); $this->Cell(40,4,$company_adres,0,10,'L',0); // выводим адрес компании $this->Cell(40,4,$company_tel,0,10,'L',0); // выводим телфон компании $this->Cell(40,4,$company_site,0,10,'L',0); // выводим адрес сайта компании } } |
Для тех кто запутался и не понимает какой код и что и как ниже приведу два файла которые должны получится после всех вышеприведенных манипуляций.
Файл index.php:
define('FPDF_FONTPATH','FPDF/font/'); require('FPDF/fpdf.php'); require('printing.class.php'); $printing = new Printing(); $printing->Open(); // Подключаем кириллические шрифты $printing->AddFont('ArialMT','','arial.php'); $printing->AddFont('Arial-BoldMT','','arialbd.php'); $printing->AddFont('Arial-BoldItalicMT','','arialbi.php'); $printing->AddPage(); //Добавляем страничку в документ $printing->Title('Прайс-лист','logo.jpg','ООО "имя компании"','г. Симферополь ул. КИМ д.1 кв.10','тел. 024-263','www.yourname.ua'); // Выводим заголовок воспользовавшись новым методом $printing->Output();// Выводим документ в браузер |
Файл printing.class.php:
class Printing extends FPDF { function Title($title,$image,$company_name,$company_adres,$company_tel,$company_site) { $this->Image($image,6,6,30,20); $this->Cell(30); // выводим пустую ячейку, ширина которой 30 $this->SetFont('Arial-BoldMT','',10); // задаем шрифт, и размер шрифта $this->Cell(40,4,$company_name,0,0,'L',0); // выводим название компании $this->Cell(70); $this->SetFillColor(187,189,189); // задаем цвет заливки следующих ячеек (R,G,B) $this->Cell(50,4,$title,0,0,'C',1); // выводим наименование компании $this->ln(); // переходим на следующую строку $this->Cell(30); $this->SetFont('ArialMT','',10); $this->Cell(40,4,$company_adres,0,10,'L',0); // выводим адрес компании $this->Cell(40,4,$company_tel,0,10,'L',0); // выводим телфон компании $this->Cell(40,4,$company_site,0,10,'L',0); // выводим адрес сайта компании } } |
Здесь пришлось использовать некоторые методы, которые я ранее не описывал, поэтому ниже я приведу некоторые из них.
SetFont():
SetFont(string family [, string style [, float size]])
Метод SetFont() задает шрифт, который будет использоваться для печати символов строки.
Параметры:
- family – Семейство шрифта, это может быть имя определенное в AddFont()
- style – Стиль шрифта
- size – Размер шрифта в точках
SetFillColor():
SetFillColor(int r [, int g, int b])
Метод SetFillColor() задает цвет, используемый для всех операций, использующих заливку.
Параметры:
- r – Если g и b заданы – красная составляющая; если нет – градация серого (от 0 до 255)
- g – Зеленая составляющая (от 0 до 255)
- b – Синяя составляющая (от 0 до 255)
ln():
Ln([float h])
Метод ln() выполняет разрыв строки.
Параметры:
- h – Высота разрыва
AddPage():
AddPage([string orientation])
Метод AddPage() добавляет новую страницу в документ.
Параметры:
- orientation – Ориентация страницы (Книжная,Альбомная).
Output():
string Output([string name [, string dest]])
Метод Output() отображает документ документ в строку, локальный файл или в браузер
Параметры:
- name – Имя файла
- dest – Пункт назначения куда выводить документ
Подробнее по всем вышеприведенным и остальным методам Вы сможете прочитать скачав архив с руководством на сайте библиотеки FPDF.(на русском языке)
Выводим из БД
И вот настал тот момент когда мы подошли к выводу данных из базы. На выходе мы должны получить таблицу с заголовками: №, наименование товара, цена, опт. цена, кол-во. И естественно в таблице должны находится записи из ранее созданной БД.
В файл index.php нужно добавить следующие строки:
$header = array("№", "наименование товара", "цена", "опт. цена"," кол-во"); // Все заголовки столбцов загоняем в массив $db = sqlite_open("bdsql/price.db"); // Открывает базу данных SQLite $query = sqlite_query($db, "SELECT * FROM price_ceni;"); // Выборка всех данных из таблицы price_ceni $printing->OutputTable($header,$query); // Передаем вновь созданному методу заголовки столбцов и запрос выборки из БД $printing->Output();// Выводим документ в браузер |
В файл printing.class.php нужно добавить следующие строки:
function OutputTable($header,$query) { $w=array(10,70,40,30,30,30); // Массив с шириной столбцов $this->Cell(10); $this->SetFont('Arial-BoldMT','',11); for($i=0;$i<count($header);$i++){$this->Cell($w[$i],7,$header[$i],1,0,'C');} $this->Ln(); $this-> SetFont('ArialMT','',8); while($array = sqlite_fetch_array($query)) { $this->Cell(10); $this->Cell(10,4,$array['id'],1,0,'C',0); $this->Cell(70,4,$array['name'],1,0,'L',0); $this->Cell(40,4,$array['cena'],1,0,'C',0); $this->Cell(30,4,$array['opt_cena'],1,0,'C',0); $this->Cell(30,4,$array['kol_vo'],1,0,'C',0,1); $this->ln(); } } |
Комментировать методы я не буду, потому ранее я их все описывал, некоторые строки кода я прокомментировал и считаю что этого должно быть достаточно, если что то непонятно обращайтесь к мануалу в котором описаны все методы FPDF.
В итоге у Вас должно получится два следующих файла:
Файл index.php:
/* $db = sqlite_open("bdsql\price.db"); $query_table = sqlite_query($db, "CREATE TABLE price_ceni (id INTEGER PRIMARY KEY, name TEXT, cena TEXT, opt_cena TEXT, kol_vo TEXT);"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'So-dimm ddr2 pc-3200/4200/5300/6400 2056mb','25 u.e.','10 u.e.','125 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'SATA 40-160GB','146 u.e.','121 u.e.','1005 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'DVD-R','1595 u.e.','1220 u.e.','1725 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'Nvidia 32mb geforce4 420go','2555 u.e.','1230 u.e.','12895 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'HP 17-20v','2655 u.e.','2360 u.e.','14525 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'HP pavilion zd7000','5225 u.e.','3330 u.e.','4725 sht.');"); $query_insert = sqlite_query($db, "INSERT INTO price_ceni(id,name,cena,opt_cena,kol_vo) VALUES (NULL,'Matrix 15.4 *(1280*800)','22345 u.e.','1330 u.e.','12335 sht.');"); */ define('FPDF_FONTPATH','FPDF/font/'); require('FPDF/fpdf.php'); require('printing.class.php'); $printing = new Printing(); $printing->Open(); // Подключаем кириллические шрифты $printing->AddFont('ArialMT','','arial.php'); $printing->AddFont('Arial-BoldMT','','arialbd.php'); $printing->AddFont('Arial-BoldItalicMT','','arialbi.php'); $printing->AddPage(); //Добавляем страничку в документ $printing->Title('Прайс-лист','logo.jpg','ООО "имя компании"','г. Симферополь ул. КИМ д.1 кв.10','тел. 024-263','www.yourname.ua'); // Выводим заголовок воспользовавшись новым методом $header = array("№", "наименование товара", "цена", "опт. цена"," кол-во"); // Все заголовки столбцов загоняем в массив $db = sqlite_open("bdsql/price.db"); // Открывает базу данных SQLite $query = sqlite_query($db, "SELECT * FROM price_ceni;"); // Выборка всех данных из таблицы price_ceni $printing->OutputTable($header,$query); $printing->Output();// Выводим документ в браузер |
Файл printing.class.php:
class Printing extends FPDF { function Title($title,$image,$company_name,$company_adres,$company_tel,$company_site) { $this->Image($image,6,6,30,20); $this->Cell(30); // выводим пустую ячейку, ширина которой 30 $this->SetFont('Arial-BoldMT','',10); // задаем шрифт, и размер шрифта $this->Cell(40,4,$company_name,0,0,'L',0); // выводим название компании $this->Cell(70); $this->SetFillColor(187,189,189); // задаем цвет заливки следующих ячеек (R,G,B) $this->Cell(50,4,$title,0,0,'C',1); // выводим наименование компании $this->ln(); // переходим на следующую строку $this->Cell(30); $this->SetFont('ArialMT','',10); $this->Cell(40,4,$company_adres,0,10,'L',0); // выводим адрес компании $this->Cell(40,4,$company_tel,0,10,'L',0); // выводим телфон компании $this->Cell(40,4,$company_site,0,10,'L',0); // выводим адрес сайта компании $this->ln(); $this->ln(); } function OutputTable($header,$query) { $w=array(10,70,40,30,30,30); // Массив с шириной столбцов $this->Cell(10); $this->SetFont('Arial-BoldMT','',11); for($i=0;$i<count($header);$i++){$this->Cell($w[$i],7,$header[$i],1,0,'C');} $this->Ln(); $this-> SetFont('ArialMT','',8); while($array = sqlite_fetch_array($query)) { $this->Cell(10); $this->Cell(10,4,$array['id'],1,0,'C',0); $this->Cell(70,4,$array['name'],1,0,'L',0); $this->Cell(40,4,$array['cena'],1,0,'C',0); $this->Cell(30,4,$array['opt_cena'],1,0,'C',0); $this->Cell(30,4,$array['kol_vo'],1,0,'C',0,1); $this->ln(); } } } |
Если Вы все сделали правильно то у Вас должен получится PDF-документ содержащий следующее:
Теперь я выложу все файлы вместе с библиотекой и полученным PDF-файлом в архив, который можно скачать здесь.
Мой вольный перевод Уроков с оф. сайта FPDF:
- FPDF – Урок 1: Простой пример
- FPDF – Урок 2: Заголовок, подвал, разрыв страницы и изображение
- FPDF – Урок 3: Переносы строк и работа с цветом
- FPDF – Урок 4: Много столбцов
- FPDF – Урок 5: Таблицы
- FPDF – Урок 6: Ссылки и вывод HTML
- FPDF – Урок 7: Добавление новых шрифтов и поддержка разных кодировок
Если же Вы решите каким то образом расширить функционал Вашего небольшого скрипта то Вам поможет архив с документацией.
Ссылки
- http://pdf-reader.ru/ – сайт посвященный формату PDF
- http://ru.wikipedia.org/wiki/PDF – материала на ВИКИпедии про PDF
- http://www.fpdf.org/ – официальный сайт библиотеки FPDF
- http://phpclub.ru/detail/article/fpdf – достаточно хорошая статья описывающая работу с FPDF
- http://ttf2pt1.sourceforge.net/ – страница утилиты которая преобразовывает шрифты TrueType (большая часть шрифтов под Windows) в формат Type1
- http://ru.wikipedia.org/wiki/SQLite – материал на ВИКИпедии про SQLite
- http://www.fpdf.org/en/download.php – страница загрузки библиотеки FPDF и документации по ней
- http://habrahabr.ru/blogs/php/69568/ – Как альтернативный вариант статья на хабре: Текст любой ценой: PDF
Удачного использования!