ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Нарис з приводу створення PDF-файлів
         

     

    Інформатика, програмування

    Нарис з приводу створення PDF-файлів

    Максим Фокін, "Королівство Delphi"

    В Останнім часом на просторах інтернету виявилося дуже багато PDF converter'ов, reader'ов і write'ов. І переважна більшість з них пропонується за гроші. Сама програма від 10 $ до 300 $. А вже вихідний код за набагато більші гроші ціна починається від 200 $ а в одному місці (зацікавившись цим полазити по инету) аж за 900 євро.

    Дана проблемма мене зацікавила в плані програмування і ось результати доводжу до вашого відома. (Дані результати отримані мною при вивченні нутрощів PDF файлу, коли відкриваєш його в total commander через F3)

    Звичайний PDF файл складається з чотирьох частин

    : =

    Що таке таке

    ? Це звичайне згадка про версію PDF specification. Яке присутній у першому рядку PDF файлу. Наприклад "% PDF-1.3" У сьомої версії акробата яка вийшла де то на початку літа цього року, цей номер "% PDF-1.7", але це не версія продукту, це версія саме специфікації. Другий рядок PDF йде невелика аброкадабра (мабуть призначена для подальшого використання) "% ВДПУ"

    Всі з першою частиною PDF розібралися.

    Що із себе представляє другу частину яка називається ?

    Відповідь дуже простий: це послідовність об'єктів, опис яких як і хедера представлені в текстовому вигляді.

    Кожен об'єкт це текстовий фрагмент з порядковим номером в імені наприклад "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" містить в собі посилання на групу сторінок документа

    (Наприклад

    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 <>

    /Rotate 0

    >>

    )

    І кілька "другорядних"

    Розберемо об'єкт сторінка:

    /Rotate поле показує на скільки градусів зображення сторінки повинно бути повернуто при відображення в програмі

    /MediaBox та/CropBox поля описують розмір сторінки

    /Parent посилання на батьківський об'єкт "/ Pages"

    /Resources це поле описує який фонт повинен бути використаний для відображення сторінки (фонт це окремий об'єкт) і установку ProcSet ця установка показує яке вміст потоку даних даної сторінки (теж може бути визначений як об'єкт, а не як поле)

    /Contents Найцікавіше поле в об'єкті "сторінка", дає посилання на об'єкт вмісту цієї сторінки, причому: якщо це поле відсутнє в об'єкті "сторінка" означає сторінка порожня

    Вміст сторінки:

    Об'єкт "stream"

    4 0 obj <> 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. Він обмежується операторами BT і ET

    BT Begins a Text Object - характеризує початок тексту

    ET Ends a Text Object. - Характеризує кінець тексту

    /F12 9 Tf -

    /F12 це кодове ім'я об'єкта який характеризує фонт що використовується на даній сторінці

    9 це розмір фонт

    Tf це оператор який характеризує що даний рядок в об'єкті steam є установка фонт та розміру

    10 782 TD - це цифри звідки починається даний рядок (відлік здійснюватися від лівого верхнього кута)

    Tj - Це оператор перекладу на новий рядок

    Ну а в круглих дужках наш текст

    Кодований потік я сдесь не пояснюю. Він заснований на алгоритмах RC4, RC5, MD5.

    Що таке об'єкт Font

    12 0 obj

    <<

    /Type/Font

    /Subtype/Type1

    /Name/F7

    /BaseFont/Courier-Oblique

    /Encoding/WinAnsiEncoding

    >>

    /Type / Font Природно назва типу

    /Subtype / Type1 назва підтипу

    /Name / F7 F7 це кодове ім'я

    PDF підтримує декілька видів Фонтен. Вони перераховані нижче

    Type 1, including subsets and Multiple Master "snapshots"

    Type 3

    TrueType, including subsets

    Type 0

    Чесно кажучи, я не переймався Type 3, TrueType, including subsets, Type 0 нічого по ним сказати не можу.

    А Type 1 - це наступні фонт

    Courier

    Courier-Bold

    Courier-BoldOblique

    Courier-Oblique

    Helvetica

    Helvetica-Bold

    Helvetica-BoldOblique

    Helvetica-Oblique

    Times-Roman

    Times-Bold

    Times-Italic

    Times-BoldItalic

    Symbol

    ZapfDingbats

    20 0 obj

    <<

    /F1 6 0 R

    /F2 7 0 R

    /F3 8 0 R

    /F4 9 0 R

    /F5 10 0 R

    /F6 11 0 R

    /F7 12 0 R

    /F8 13 0 R

    /F9 14 0 R

    /F10 15 0 R

    /F11 16 0 R

    /F12 17 0 R

    /F13 18 0 R

    /F14 19 0 R

    >>

    endobj

    Це об'єкт з назвами кодових імен для фонт першого типу. З цього кодовому імені можна легко отримати сам об'єкт фонт.

    6 0 obj

    <<

    /Type/Font

    /Subtype/Type1

    /Name/F1

    /BaseFont / Helvetica

    /Encoding / WinAnsiEncoding

    >>

    ВСЕ: тобто мінімальний складається з наступних об'єктів: "catalog", "pages", "page", "Resources" (опіціонально може бути присутнім, як поле в об'єкті сторінка), нетипізований об'єкт "stream", група об'єктів "font"

    Що таке ?

    На Насправді це звичайна текстова таблиця, вона починається зі слова xref і своє тілі має посилання на всі непрямі об'єкти в документі. Ось приклад

    xref

    0 27

    0000000021 65535 f

    0000000016 00000 n

    0000000105 00000 n

    0000000169 00000 n

    0000000356 00000 n

    0000000713 00000 n

    0000000892 00000 n

    0000001006 00000 n

    0000001125 00000 n

    0000001247 00000 n

    0000001373 00000 n

    0000001486 00000 n

    0000001604 00000 n

    0000001725 00000 n

    0000001850 00000 n

    0000001967 00000 n

    0000002084 00000 n

    0000002203 00000 n

    0000002326 00000 n

    0000002439 00000 n

    0000002558 00000 n

    0000000024 00001 f

    0000002751 00000 n

    0000002831 00000 n

    0000000000 00001 f

    0000002915 00000 n

    0000002955 00000 n

    0 27 Ці цифри позначають наступне:

    0 - Перша object number в таблиці

    27 - Кількість елементів таблиці

    Перший елемент таблиці завжди іммет вид "XXXXXXXXXX 65535 f" де X це цифра, а 65535 це значення за замовчуванням для першого елемента в таблиці. Символ "f" означає "free", тобто об'єкт не використовується Посилання на об'єкти, які використовуються, в кінці мають символ "n"

    Розберемо елемент цієї таблиці.

    Перші 10 цифр - це зсув від початку файлу до початку об'єкта.

    0000000016 означає що через 16 байт від початку файлу Вас зустріне перша згадка про об'єкті тобто, наприклад, 4 0 obj

    Другі п'ять цифр - це номер створення файлу. Якщо файл щойно створений, то вони завжди нулі. Якщо файл модифікується, то це число збільшується на одиницю. Тобто, 0000000024 00001 f

    Канонічний, тільки що створений PDF файл, має тільки одну таблицю. Але, якщо файл редагується, то таких таблиць може бути дуже багато.

    Взаємозв'язок таблиць здійснюється за допомогою останнього елемента і кодового слова startxref

    Канонічний, тільки що створений PDF файл, має тільки одну таблицю, після таблиці йде елемент trailer

    А після Трайлер йде кодове слово startxref, яке вказує на зсув від початку файлу до початку таблиці, ось приклад.

    trailer

    <<

    /Size 3

    >>

    startxref

    173

    %% EOF

    Це означає, що через 173 байти від початку документа, буде присутній кодове слово xref. Але, якщо файл був відредагований, то останній у файлі Трайлер буде мати вигляд:

    xref

    0 3

    0000000000 65535 f

    0000003609 00000 n

    0000003832 00000 n

    trailer

    <<

    /Size 3

    /ID [<7a15ab3ed3999575ff2f3034104a82c1> <7a15ab3ed3999575ff2f3034104a82c1>]

    >>

    startxref

    173

    %% EOF

    Але, якщо ми звернемося до таблиці, куди вказує посилання startxref 173, то ми знайдемо наступну таблицю, а за нею Трайлер, який буде мати поле/Prev 3896

    3 16

    0000000016 00000 n

    0000000664 00000 n

    0000000936 00000 n

    0000001106 00000 n

    0000001133 00000 n

    0000001250 00000 n

    0000001395 00000 n

    0000001811 00000 n

    0000001992 00000 n

    0000002180 00000 n

    0000002360 00000 n

    0000002760 00000 n

    0000003438 00000 n

    0000003516 00000 n

    0000000776 00000 n

    0000000916 00000 n

    trailer

    <<

    /Size 19

    /Info 1 0 R

    /Root 4 0 R

    /Prev 3896

    /ID [<7a15ab3ed3999575ff2f3034104a82c1> <7a15ab3ed3999575ff2f3034104a82c1>]

    >>

    startxref

    567

    %% EOF

    Дане поле/Prev 3896 вказує нам на попередню таблицю, а посилання startxref 567 вказує на наступну таблицю і так практично до нескінченності, поки в черговому полі startxref ми не побачимо 0. Це значить, ми прочитали всі таблиці.

    В даному нарисі, звичайно, не вистачає вихідного коду. Ось і він: представлені два модуля основний "PDFDocument" і допоміжний "PDFBaseFonts"

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://www.citforum.ru/

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status