Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

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

РефератДопомога в написанніДізнатися вартістьмоєї роботи

На насправді звичайна текстова таблиця, вона починається з слова xref та свого тілі має посилання все непрямі об'єкти у документі. Ось приклад. Это отже, що за 173 байта з початку документа, житиме кодове слово xref. Але, якщо файл був відредагований, то останній файлі трайлер матиме вид: Но, коли ми звернімося таблиці, куди вказує посилання startxref 173, ми знайдемо таку таблицю, а й за ній… Читати ще >

Нарис щодо створення PDF-файлів (реферат, курсова, диплом, контрольна)

Очерк щодо створення PDF-файлов

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

В останнім часом у Інтернету виявилося дуже багато 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 «містить у собі посилання групу сторінок документа.

(Например

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

>>

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

Что таке <cross-reference table>?

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

xref.

0 27.

21 65 535 f.

16 0 n.

105 0 n.

169 0 n.

356 0 n.

713 0 n.

892 0 n.

1 006 0 n.

1 125 0 n.

1 247 0 n.

1 373 0 n.

1 486 0 n.

1 604 0 n.

1 725 0 n.

1 850 0 n.

1 967 0 n.

2 084 0 n.

2 203 0 n.

2 326 0 n.

2 439 0 n.

2 558 0 n.

24 1 f.

2 751 0 n.

2 831 0 n.

0 1 f.

2 915 0 n.

2 955 0 n.

0 27 Такі цифри означають :

0 — перший object number в таблиці.

27 — кількість елементів таблиці.

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

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

Первые 10 цифр — це усунення з початку файла на початок об'єкта.

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

Вторые п’ять цифр — це номер генерації файла. Якщо файл хіба що створено, всі вони завжди нулі. Якщо файл модифікується, це число поповнюється одиницю. Тобто, 24 1 f.

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

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

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

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

trailer.

<<

/Size 3.

>>

startxref.

%%EOF.

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

xref.

0 3.

0 65 535 f.

3 609 0 n.

3 832 0 n.

trailer.

<<

/Size 3.

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

>>

startxref.

%%EOF.

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

3 16.

16 0 n.

664 0 n.

936 0 n.

1 106 0 n.

1 133 0 n.

1 250 0 n.

1 395 0 n.

1 811 0 n.

1 992 0 n.

2 180 0 n.

2 360 0 n.

2 760 0 n.

3 438 0 n.

3 516 0 n.

776 0 n.

916 0 n.

trailer.

<<

/Size 19.

/Info 1 0 R.

/Root 4 0 R.

/Prev 3896.

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

>>

startxref.

%%EOF.

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

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

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

Для підготовки даної праці були використані матеріали із сайту internet.

Показати весь текст
Заповнити форму поточною роботою