Средства разработки приложений



              

Очерк по поводу создания PDF-файлов - часть 2


В ней представлены ссылки в виде смещения от начала файла до начала объекта (Данные (строки) в объекте разделяются #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" содержит в себе ссылку на группу страниц документа (Например 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj )
  • "/Page" содержит в себе ссылку на объекты относящиеся к конкретной странице. (Например 3 0 obj << /Type /Page /Parent 2 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Contents 4 0 R /Resources << /Font 20 0 R /ProcSet [ /PDF /Text ] >> /Rotate 0 >> )

И несколько "второстепенных"

Разберем объект страница:

  • /Rotate поле показывающее на сколько градусов изображение страницы должно быть повернуто при отображение в программе
  • /MediaBox и /CropBox поля описывающие размер страницы
  • /Parent ссылка на родительский объект "/Pages"
  • /Resources это поле описывает какой фонт должен быть использован при отображении страницы (фонт это отдельный объект) и установку ProcSet эта установка показывает какое содержимое потока данных данной страницы (тоже может быть определен как объект, а не как поле)
  • /Contents Самое интересное поле в объекте "страница", дает ссылку на объект содержимого данной страницы, причем : если это поле отсутствует в объекте "страница" значит страница пустая

Содержимое страницы:

Объект "stream"

4 0 obj << /Length 305 >> stream BT /F12 9 Tf 10 782 TD 0 -12.5 TD ( Max Fokin) Tj 0 -12.5 TD ( mnb) Tj 0 -12.5 TD () Tj 0 -12.5 TD (Max Privet) Tj 0 -12.5 TD ( 1) Tj 0 -12.5 TD (1) Tj 0 -12.5 TD (2) Tj 0 -12.5 TD (3) Tj 0 -12.5 TD (45) Tj ET endstream endobj

/Length 305 - это поле показыввающее сколько байт от слова stream до слова endstream

Самый простой вариант — это некодированный и несжатый поток данных в объекте stream.


Содержание  Назад  Вперед