Что такое PDF-файл? | База знаний

Введение

Как вы уже знаете из статьи о “PDL”, PDF — это статический язык описания страниц, имеющий строгую неизменяемую структуру.

PDF является одним из, если не самым популярным языком описания страниц, благодаря огромному разнообразию функций, которые разработчики из Adobe добавили в его спецификацию. Более того, Adobe также предоставляет людям инструменты, позволяющие реализовать эти функции в документах. Эта статья представляет собой краткий обзор синтаксиса, структуры и особенностей PDF.

Что такое PDF-файл?

Первоначальная цель разработки PDF или сокращенно Portable Document Format заключалась в создании формата документа, который удовлетворял бы многочисленным требованиям обмена цифровыми документами в средах, независимых от устройства и разрешения. Эти требования включают интерактивный просмотр, высокопроизводительную навигацию, малое дисковое пространство, совместную работу над документами, поддержку различного медиаконтента, шифрование, подпись, создание форм, презентацию и т. д. Несмотря на первоначальное намерение предоставить предприятиям исчерпывающий формат для обмена цифровыми документами, в спецификацию были также добавлены функции высококачественной печати, хотя и позже.

Синтаксис PDF-файла

PDF имеет модель изображения, полученную из модели PostScript, также использует 1-2-символьные длинные операторы, а также в формате AI, а также имеет постфиксный синтаксис BNF, где все необходимые операнды идут перед оператором.

operand1...operandm operator

Помимо длины оператора, между операторами PDF и PostScript есть некоторые различия. В PDF все необходимые операнды должны предшествовать операторам, тогда как в Postscript операнды получаются из стека PostScript. В PDF оператор не возвращает результат, как в PostScript. Оператор PDF выполняет какое-либо действие для создания страницы, например рисует графику или текст, или устанавливает какое-либо свойство в графической среде. В PostScript всю работу выполняют операторы.

Обычно большая часть содержимого PDF-файлов сжимается с помощью кодировки Flate и поэтому является двоичной. Помимо сжатия PDF-файлы также можно зашифровать, чтобы ограничить доступ к содержимому документа. Поэтому весь файл следует рассматривать как двоичный. Только в том случае, если PDF-файл не сжат, не зашифрован и не содержит двоичного содержимого, такого как изображения, звук, видео и т. д., его можно считать текстовым.

Объекты спецификации PDF

В спецификации PDF объект является синонимом типа, тогда как в PostScript есть типы, которые могут быть примитивными и сложными, и последние можно назвать «объектами». Поэтому все типы в PDF, как простые, так и сложные, являются объектами. Язык PDF состоит из логических значений, целых чисел, действительных чисел, имен, строк, массивов, словарей и потоков. Строки могут быть в буквальном или шестнадцатеричном формате, как показано ниже.

( This is a string )
<4E6F762073686D6F7A206B6120706F702E>

literal format
hexadecimal format

Массивы заключаются в квадратные скобки. Включает подтип Rectangle — массив из 4 элементов.

Словари хранят данные в парах «ключ-значение», где ключ — это имя или строка (для словаря имен), а значение — объект или ссылка на объект. Оно заключено в двойные угловые скобки. В словарях есть поле Тип, которое показывает, какие данные хранятся в данном словаре.

<< /Type /Example
  /Subtype /DictionaryExample
  /Version 0 . 01
  /IntegerItem 12
  /StringItem ( a string )
  /Subdictionary << /Item1 0 . 4
    /Item2 true
    /LastItem ( not ! )
    /VeryLastItem ( OK )
  >>
>>
endobj

Объекты могут быть прямыми и косвенными. Косвенные объекты — это те, на которые можно ссылаться из других объектов по их идентификатору.

Косвенные объекты PDF Потоки — это объекты, которые обычно содержат двоичные или закодированные данные. Они нечитабельны для человека и не имеют ограничений по длине. Обычно потоки PDF-файлов содержат сжатое содержимое страниц, изображения или другие носители. Объект Stream состоит из прямого словаря с длиной потока и массива фильтров, используемых для кодирования потока, а также закодированных данных после ключевого слова stream.

181 0 obj
  <<
    /Length 473 0 R
    /Subtype /Image
    /Width 2
    /Height 19
    /BitsPerComponent 8
    /ColorSpace /DeviceGray
    /Filter [/ASCII85Decode /FlateDecode]
  >>
stream
Gb"[2*s<F2i'/7_!,1%/hZ~>
endstream
endobj

PDF-операторы

Операторы — это своего рода прямые объекты, которые создают графику страницы и, как мы упоминали ранее, представлены одно- или двухбуквенными ключевыми словами. Существует два типа операторов PDF:

* executing actions or setting properties of the graphics state.

PDF operator

x y m
x y l
x1 y1 x2 y2 x3 y3 c
h
x y width height re
a b c d e f cm
S
s
f
F
W
font size Tf
charSpace Tc
q
Q
lineWidth w
lineCap J
font size Tf
charSpace Tc

Description

begin a new subpath by moving the current point to coordinates (x, y)
append a straight line segment from the current point to the point (x, y)
append a cubic Bezier curve to the current path
close the current subpath
append a rectangle to the current path
modify the current transformation matrix by concatenating the specified matrix
stroke the path
the same, but close path
fill the path
the same, but close path
modify the current clipping path by intersecting it with the current path
set the text font to font and the text font size to size
set the character spacing to charSpace
save the current graphics state on the graphics state stack
restore graphics state from the graphics state stack
set the line width in the graphics state
set the line cap style in the graphics state
set the text font to font and the text font size to size
set the character spacing to charSpace

* grouping

PDF operator

BT...ET
BI...EI
BMC...EMC
BX...EX

Description

begin and end a text object
begin and end an image object
begin and end a marked-content sequence
begin and end a compatibility section

Особыми видами операторов группировки являются BX…EX. Они заключают в себе части содержимого страницы, где неопознанные объекты следует игнорировать. Таким образом, они являются эквивалентами псевдокомментариев AI %_.

Структура PDF-файла

PDF-файл имеет четыре обязательных структурных элемента.

Структура PDF-файла

  1. Однострочный заголовок, в котором написана версия языка PDF.

%PDF-1.5

2. Тело, содержащее объекты документа. Строение тела будет описано далее в этой статье.
  1. Таблица перекрестных ссылок. Он используется для быстрого произвольного доступа к объектам документа. Он содержит смещение в байтах до начала объектов от начала файла.

xref
0 6
0000000003 65535 f
0000000017 00000 n
0000000081 00000 n
0000000000 00007 f
0000000331 00000 n
0000000409 00000 n

4. Трейлер, указывает на последнюю таблицу перекрестных ссылок и содержит общее количество объектов в таблицах перекрестных ссылок, Идентификатор документа и ссылки на:

trailer
  <<
    /Size 15
    /Root 2 0 R
    /Info 1 0 R
  >>
startxref
6224

Новая таблица перекрестных ссылок и трейлер добавляются после каждого обновления документа. Оно будет описано далее в статье.

Структура документа

PDF-документ имеет древовидную структуру, корнем которой является словарь каталога.

Структура PDF-документа

Каталог содержит ссылки на поддерево описания страниц, поддерево структуры и другие поддеревья уровня документа и конечные узлы.

2 0 obj
  << /Type /Catalog
    /Pages 3 0 R
    /Outlines 4 0 R
    /PageMode /UseOutlines
    /ViewerPreferences 5 0 R
    /OpenAction [6 0 R /Fit]
  >>
endobj

Дерево страниц содержит упорядочение узлов дерева страниц и узлов листьев страниц. Точно древовидная структура набора страниц вместе с алгоритмом поиска позволяет быстро перемещаться по тысячам страниц в поисках нужной.

поток содержимого PDF-страницы

Словарь страниц содержит ссылку на поток контента, который может быть сжат, как показано на рисунке выше, или несжат. В последнем случае мы увидим операторы PDF в удобочитаемом тексте, как показано на рисунке ниже.

7 0 obj
  <<
    /Length 8 0 R
  >>
stream
1 0 0 1 0 0 cm
0 0 m
595 0 l
595 842 l
0 842 l
h
W
n
q
/Alpha1 gs
0 0 0 rg
0 0 0 RG
0 J
q
0.96593 0.25882 -0.25882 0.96593 0 0 cm
1 0 0 1 0 0.25882 cm
0.02 w
-0.96593 0 m
0 -0.25882 l
0 -0.25882 0 -0.25882 0 -0.25882 c
0.14294 -0.25882 0.25882 -0.14294 0.25882 0 c
0.25882 0.14294 0.14294 0.25882 0 0.25882 c
h
S
Q
endstream
endobj

Помимо массива дочерних узлов (это может быть дерево страниц или узлов страниц) Pages, словарь содержит ссылку на словарь Resources, который, в свою очередь, ссылается на Fonts, ProcSets, Images (XObject) и т.д.

9 0 obj
  <<
    /ProcSet 10 0 R
    /XObject 11 0 R
    /Font 12 0 R
    /ExtGState 13 0 R
  >>
endobj

Аннотации и другие поддеревья будут случайно упоминаться в разделе «Функции».

Функции

Графические возможности формата PDF

Нет смысла упоминать общие для большинства языков описания страниц возможности по отрисовке графики и текста. Мы лишь говорим, что богатство поддерживаемых шрифтов и цветовых пространств такое же, как и в PostScript.

Fonts

- Adobe Type 0
- Adobe Type 1
- Compact Fonts (CFF)
- Chameleon
- TrueType
- CID-keyed

Color spaces

- DeviceGray
- DeviceRGB
- DeviceCMYK
- DeviceN
- Separated colors
- Spot
- CIE-based

Прозрачность

PDF поддерживает прозрачность.

Внешние файлы

Любой файл мультимедиа или документа можно встроить в PDF или на него можно ссылаться из документа.

Гиперссылки

Гиперссылки поддерживаются в PDF.

Избирательный и интерактивный вид

PDF позволяет показывать только те части контента и его внешний вид, которые необходимы для определенного использования, и скрывать остальные. Это полезно, например, при импорте графики Adobe Illustrator, содержащей слои, некоторые из которых необходимы для работы в Adobe Illustrator, но не являются необходимыми для просмотра в Adobe Acrobat Reader. Другим случаем предвыборной точки зрения может быть статья, написанная на разных языках или представленная для пользователей с ограниченными возможностями, но сохраненная в одном документе. Также могут быть разные варианты использования: один вид для просмотра, проектирования и печати.

Интерактивный просмотр PDF включает в себя возможности:

Аннотация — это своего рода плавающее поле, содержащее некоторые заметки, звук, видео или какой-либо другой контент.

Интерактивная навигация

Навигация между различными частями документа может осуществляться несколькими способами:

Перемещение по областям просмотра и скрытие некоторых частей документа реализовано с помощью словарей Viewport и NavigationNode.

Дополнительные обновления

Все изменения, внесенные в документ PDF, добавляются в документ без стирания предыдущего содержимого. И каждый раз, когда документы изменяются, добавляются новые ссылки (таблица перекрестных ссылок) и трейлер. Новая таблица перекрестных ссылок содержит ссылки на добавленные или удаленные объекты, а также на предыдущую таблицу перекрестных ссылок. Такой механизм позволяет собрать окончательное содержимое документа и в то же время сохранить предыдущие состояния документа.

Производительность

Высокая производительность навигации по страницам обеспечивается древовидной структурой страниц и эффективным алгоритмом поиска. Однако его можно еще больше увеличить, объединив повторяющиеся графические элементы в один объект, называемый Form XObject, и используя один объект во всех необходимых местах. Существует также способ оптимизировать весь документ для более быстрого просмотра. Это линеаризация. Линеаризация изначально была изобретена для эффективного просмотра PDF-документов, доступных через Интернет. Линеаризованный PDF-документ доступен только для чтения, любые изменения в нем потребуют повторной линеаризации.

Высокая производительность навигации между объектами документа реализуется за счет таблиц перекрестных ссылок, в которых хранятся смещения объектов от начала файла.

Сжатие

Сжатие PDF-документов, обычно плоское кодирование, позволяет создавать большие документы, занимающие относительно мало места на диске. Например, файл спецификации PDF, содержащий 758 страниц со структурой, миниатюрами, изображениями и таблицами, имеет размер около 9 МБ.

Безопасность

PDF-документы можно зашифровать, чтобы предоставить дифференцированный доступ только определенным пользователям, и их можно подписать. Функция цифровой подписи позволяет аутентифицировать личность пользователя и содержимое документа. Цифровая подпись связывает состояние документа, когда он подписан с использованием информации пользователя. Цифровая подпись может быть в любой форме: от чисто математического до сканирования сетчатки, если предусмотрен соответствующий обработчик подписи.

Интерактивные формы

Он используется для сбора информации от пользователей. Интерактивные формы, или так называемые AcroForms, могут проверять, форматировать и отправлять пользовательские данные на сервер.

Презентация

Существует несколько способов представления в PDF:

Медиа-контент

В документы PDF можно добавлять изображения, звуки, видеоролики и трехмерную графику.

Данные извлечения

PDF позволяет добавлять определенную разметку, которая дает внешним приложениям возможность извлекать необходимые данные. Документ с такой разметкой называется Tagged PDF.

Допечатная поддержка

Подготовка к публикации включает в себя метки принтера, цветоделение, способы вывода и треппинг.

Для чего нужен PDF-файл?

Основное применение PDF-документов — электронный обмен документами и просмотр в различных средах.

Как создать PDF-файл?

Создание и редактирование PDF-документов возможно в автономных приложениях Adobe Acrobat.

Как открыть PDF-файл?

Вы можете открывать и просматривать PDF-файлы в автономном приложении Adobe Acrobat Reader или в браузере Google Chrome с плагином PDF. Также вам помогут простые утилиты, такие как Sumatra PDF, Foxit Reader или Free PDFReader. Другой способ — просмотреть PDF онлайн, например, на Google Диске.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.