
На работе появилась нужность сгенерировать pdf отчет с помощью php!
Вчера намучавшись с этим делом и наконец-то разобравшись, режил выложить все мысли по этому поводу, дабы чтобы хранилось и потом не забылось, да и может кому полезно будет!
И так!
Генерация подобного возможна с помощью двух пакетов:
1. File_PHP - пакет PEAR
2. FPDF - нечто подобное, но чуть с большим функционалом, имхо!
В итоге был выбран второй вариант!
Кстати, при использовании 1 пакета, второй вам все равно понадобится, об этом далее.
Сама привязка пакетов к скрипту не имеет никакой сложности и проще простого! Довольно широких диапазон функций, который позволяют творить с вашим pdf что угодно!
Проблема же встает, когда возникает нужда писать русскими буковками!
Для начала, нужно превратить из шрифта TrueType в метрический шрифт, который и юзает Adobe.
Это делается с помощью программки
ttf2pt1. Скачать ее можно легко в инете! Программа работает из командной строки! Чтобы сгенерировать метрический шрифт с расширением amf в командной стоке набираем
ttf2pt1 -A шрифт.ttf имяшрифтагенерируемого. Появляется файлик с раширением afm. В моем случае я работал со шрифтом arial. Посему команда была такая
ttf2pt1 -A arial.ttf arial
Далее в файлах FPDF создаем скриптик, который выполняет функцию MakeFont(). Эта функция генерирует файлы описания скрипта и находится в папке font/makefont/makefont.php
и имеет следующий вид:
PHP:
MakeFont(string fontfile, string afmfile [, string enc [, array patch [, string type]]])
font>
Где:
fontfile - шрифт TrueType
afmfile - сгенерированный вами afm шрифт
enc - кодировка (в данном случае указываем кириллицу cp1251)
patch - опциональное изменение кодировки (не указываем)
type - тип шрифта (по умлочанию TrueType, по-этому можно не указывать)
так вот, создаем скриптик, в который инклудим файл makefont/makefont.php в директории, скажем font, следующего вида:
PHP:
MakeFont("arial.ttf", "arial.afm", "cp1251") ;
font>
И запускаем его! После чего происходит генерация двух файлов, описывающих скрипт!
Это arial.php и arial.z
В данном случае ключевым файлом для нашей работы является arial.php, в котором есть много чего интересного!
Все это дело оставляем на сервере, где у нас будут работать скрипты!
С помощью команд FPDF (с коими можно ознакомиться в документации) создаем pdf файл, но чтобы подключить к нему созданные нами шрифты, нужно вызвать функцию FPDF addfont().
А именно так:
PHP:
$pdf = new FPDF();
$pdf->addfont('arial','','font/arial.php');
font>
Как вы уже поняли, первый аргумент функции - имя шрифта, третий - это путь до сгенерированного нами пхп файла! Второй аргумент - это стиль шрифта(жирный, курсив и т.д.). Однако для его использования нужно повторить операции по созданию шрифта соотвественно для жирного, курсива и т.д.!
Пишем какой-нибудь русский текст, выводим его в пдф! И опля! Шрифт русский у нас отображается, но некрасиво! Расстояние между буквами разное, все очень криво и неровно! А все из-за того, что как то некоректно сгенерировался файл arial.php с описанием скрипта!
Посмотрим, что в нем есть:
А в нем есть массив $cw, который имеет вид ключ=>значение = символ=>размерсимвола! И если внимательно приглядеться, что для латиницы для каждой буквы стоит разный размер, а вот для кириллицы одинаковы 750! Можно вручную изменять эти размеры, добиваясь красоты вида!
Но я пожалуй размещу уже исправленную карту размеров для arial regular!
Всем спасибо за внимание!
Сорри за корявость изложения!
Но надеюсь на полезность содержания!