Статья: Очерк по поводу создания PDF-файлов
В последнее время на просторах интернета обнаружилось очень много PDF converter'ов, reader'ов и write'ов. И подавляющее большинство из них предлагается за деньги. Сама программа от 10$ до 300$. А уж исходный код за гораздо большие деньги цена начинается от 200$ а в одном месте (заинтересовавшись этим полазил по инету) аж за 900 евро.
Данная проблемма меня заинтересовала в плане программирования и вот результаты довожу до вашего сведения. (Данные результаты получены мною при изучении внутренностей PDF файла, когда открываешь его в total commander через F3)
Обычный PDF файл состоит из четырех частей
<PDF file> := <header>
<body>
<cross-reference table>
<trailer>
Что такое такое <header>? Это обычное упоминание о версии PDF specification. Которое присутствует в первой строке PDF файла. Например "%PDF-1.3" В седьмой версии акробата которая вышла где то в начале лета этого года, этот номер "%PDF-1.7", но это не версия продукта, это версия именно спецификации. Второй строкой PDF идет небольшая аброкадабра (видимо предназначена для дальнейшего использования) " %вгПУ"
Все с первой частью PDF разобрались.
Что из себя представляет вторая часть которая называется <body>?
Ответ очень простой: это последовательность объектов, описание которых как и хедера представлены в текстовом виде.
Каждый объект это текстовой фрагмент с порядковым номером в имени например "4 0 obj"
4 это порядковый номер объекта
0 это номер (ре)генерации файла то есть когда файл обновляется (редактируется ) то данный номер увеличивается
obj это кодовое слово означающее что в теле документа нам встретился объект
Все объекты делятся на косвенные и прямые. Все косвенные, и их большинство, после слова obj имеют в своем теле делиметер "<<", означающее начало данных объекта. И в конце данных закрывающий делиметер ">>" и кодовое слово endobj
Прямые объекты не должны иметь в своем теле открывающих и закрывающих делиметеров "<<", ">>" Все косвенные объекты доступны через cross-reference table. В ней представлены ссылки в виде смещения от начала файла до начала объекта (Данные (строки) в объекте разделяются #13#10 либо #13)
Тип "самого главного" объекта в теле PDF файла носит гордое имя "/Catalog"
4 0 obj
<<
/Type /Catalog
/Pages 2 0 R
/OpenAction [ 5 0 R /XYZ null 364 1 ]
/PageMode /UseNone
>>
endobj
На самом деле в теле минимального PDF файла типа "Hello world" должно быть 3 "главных" объекта. Давайте я их перечислю по типам:
"/Catalog" содержит в себе ссылку : на дерево страниц (/Pages)
"/Pages" содержит в себе ссылку на группу страниц документа
--> ЧИТАТЬ ПОЛНОСТЬЮ <--