Валентин Синицын
Бытует мнение, что PDF – это закрытый формат, для работы с которым
необходимо дорогостоящее ПО. Это не вполне верно: спецификация PDF доступна
всем желающим, а для создания и правки файлов можно применять не только настольные
издательские системы, но и сценарии Perl.
Модуль PDF::API2 (http://pdfapi2.sf.net)
разрабатывается Альфредом Райбенщухом (Alfred Reibenschuh) и распространяется
по лицензии GNU GPL. PDF::API2 написан на чистом Perl и имеет минимум
зависимостей: Perl 5.8.4 или выше, Encode и Compress::Zlib (если что-то и
придется установить, то только последний из них). Модуль использует стандартную
объектную нотацию Perl 5 и доступен как через CPAN, так и через репозитарии
ActiveState PPM, поэтому может быть установлен любым удобным для вас способом.
Последней на момент написания статьи версией была 0.51.
Поставляемая вместе с PDF::API2 документация
насчитывает более 160 страниц, большая часть из которых не имеет практической ценности.
Для повседневной работы вам потребуются лишь страницы PDF::API2, ::Content,
::Page и ::Util, где перечислены значения различных констант.
PDF::API2 не является средством для
редактирования PDF в прямом смысле этого слова – он не предоставляет специальных
методов для «поиска и замены» существующих элементов (например, картинок).
Однако с его помощью вы легко можете создавать собственные PDF-файлы,
а также обрабатывать и дополнять уже существующие. Как мы вскоре
увидим, этого достаточно для решения весьма широкого круга задач. Другое
ограничение – невозможность работать с зашифрованными PDF-файлами. Видимых
препятствий этому нет – программа дешифровки PDF на Perl (http://www.cs.cmu.edu/~dst/Adobe/Gallery/pdfdecrypt.pl)
занимает менее двухсот строк кода. «Альтернативный» модуль CAM::PDF (http://search.cpan.org/~clotho/CAM-PDF-1.05),
который, по моему мнению, проигрывает PDF::API2 в удобстве использования, также
справляется с этой задачей безо всякого труда. Возможно, этот функционал будет
реализован в следующих версиях модуля.
Прежде чем мы приступим к обсуждению констант
и функций, давайте поближе познакомимся с форматом PDF версии 1.4, с
которой и работает PDF::API2.