Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #73, ЯНВАРЬ 2005 г.

PDF с нуля

Никита Кислицин

Хакер, номер #073, стр. 073-116-2


Начинаем

Первое, с чего надо начать, - скачать исходники системы. Ты можешь их взять на нашем диске, а я слил отсюда: www.fpdf.org/en/dl.php?v=152&f=tgz. Как я уже говорил, в архиве ты найдешь обыкновенные php-файлы, которые надо скопировать в include-path либо в директорию с твоими скриптами. Несложно догадаться, что начало у всех сценариев, использующих FPDF, одинаково:

define('FPDF_FONTPATH','font/'); #Указываем папку со шрифтами

require("fpdf.php"); #Подключаем FPDF

XXXX ЗАГОЛОВОК XXXX

Геморрой со шрифтами

Первая строка определяет константу FPDF_FONTPATH, указывающую на папку, в которой хранятся файлы используемых шрифтов. Надо сказать, что со шрифтами здесь особая история. Как ты знаешь, есть по крайней мере два популярных формата шрифтов: PostScript и TTF. Однако, чтобы использовать какой-то шрифт в FPDF, необходимо ко всему прочему еще сгенерировать так называемый файл описания шрифта – обычный php-файл с говорящим расширением. Что классно – вместе с PDF поставляется сценарий makefont.php, который очень легко генерирует эти описания. Найти makefont можно в директории font/makefont, а о том, как его использовать, я сейчас расскажу.

Я долго думал, как это сделать проще всего, и пришел к такому подходу: создается простой скрипт, например font.php, со следующим содержанием:

<?php

require("font/makefont/makefont.php");

MakeFont("font.ttf","font.afm","cp1251");

?>

Несложно заметить, что первой строкой я подключаю файл с нужной функцией MakeFont, которая будет генерить описания шрифтов, она имеет вот такой формат:

MakeFont(string fontfile, string afmfile [, string enc [, array patch [, string type]]])

Здесь fontfile – это путь к шрифту, afmfile - путь к файлу метрики AFM, enc - имя кодировки (советую тебе использовать cp1252) и type - тип шрифта, True Type по дефолту. Ах да, patch – это необязательный параметр, который задает массив модификации кодировки.

Думаю, у тебя возник вопрос, что еще за AFM нужен? Дело в том, что TTF-шрифт состоит из двух файлов: самого шрифта и метрики. И по идее все шрифты поставляются вместе с AFM-файлами. Но если ты не нашел нужного файла, не беспокойся: его легко создать при помощи софтины ttf2pt1 (http://ttf2pt1.sourceforge.net), указав в качестве параметра ключа –A путь к шрифту и имя будущего AFM-файла.

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

Пример скрипта

Давай теперь для примера напишем простенькое приложение. Пусть у нас есть sql-таблица со статьями и нам надо написать скрипт, который бы из HTML-текста в базе данных генерировал pdf’ки. Откровенно говоря, не такая уж это и простая задача, ведь в html-коде статьи есть тэги, которые надо специальным образом обрабатывать. Скажу даже больше: если бы мне заказали скрипт, который умеет обрабатывать всевозможные тэги и делать красивые pdf’ки, я бы взял с такого заказчика кучу денег, потому что это довольно геморройная задача. Однако тебе повезло: когда я лазил по сайту www.fpdf.org, я нашел там в качестве примера скрипт, который классно конвертирует html-разметку в формат pdf. Так что я не буду тратить время и выписывать собственноручно этот не самый простой скрипт, а просто возьму его с этого сайта, благо лицензия, по которой распространяются примеры, позволяет это сделать. В принципе, ничего сложного в моей программе нет. Поскольку места в журнале не так уж много, а времени до сдачи номера осталось совсем мало, я не буду подробно описывать каждую функцию, а лишь расскажу тебе об основных шагах к созданию приложения. Полный код системы ты, как всегда, найдешь на нашем диске. Там же лежит куча примеров по использованию fpdf. Посмотри, там много интересных задумок.

Назад на стр. 073-116-1  Содержание  Вперед на стр. 073-116-3