Что такое 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 formathexadecimal 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-файлов содержат сжатое содержимое страниц, изображения или другие носители. Объект Stream состоит из прямого словаря с длиной потока и массива фильтров, используемых для кодирования потока, а также закодированных данных после ключевого слова stream.
181 0 obj << /Length 473 0 R /Subtype /Image /Width 2 /Height 19 /BitsPerComponent 8 /ColorSpace /DeviceGray /Filter [/ASCII85Decode /FlateDecode] >>streamGb"[2*s<F2i'/7_!,1%/hZ~>endstreamendobj |
PDF-операторы
Операторы — это своего рода прямые объекты, которые создают графику страницы и, как мы упоминали ранее, представлены одно- или двухбуквенными ключевыми словами. Существует два типа операторов PDF:
* executing actions or setting properties of the graphics state.
PDF operator x y mx y lx1 y1 x2 y2 x3 y3 chx y width height rea b c d e f cmSsfFWfont size TfcharSpace TcqQlineWidth wlineCap Jfont size TfcharSpace 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 pathclose the current subpathappend a rectangle to the current pathmodify the current transformation matrix by concatenating the specified matrixstroke the paththe same, but close pathfill the paththe same, but close pathmodify the current clipping path by intersecting it with the current pathset the text font to font and the text font size to sizeset the character spacing to charSpacesave the current graphics state on the graphics state stackrestore graphics state from the graphics state stackset the line width in the graphics stateset the line cap style in the graphics stateset the text font to font and the text font size to sizeset the character spacing to charSpace |
* grouping
PDF operator BT...ETBI...EIBMC...EMCBX...EX | Description begin and end a text objectbegin and end an image objectbegin and end a marked-content sequencebegin and end a compatibility section |
Особыми видами операторов группировки являются BX…EX. Они заключают в себе части содержимого страницы, где неопознанные объекты следует игнорировать. Таким образом, они являются эквивалентами псевдокомментариев AI %_.
Структура PDF-файла
PDF-файл имеет четыре обязательных структурных элемента.
- Однострочный заголовок, в котором написана версия языка PDF.
%PDF-1.5 |
- Таблица перекрестных ссылок. Он используется для быстрого произвольного доступа к объектам документа. Он содержит смещение в байтах до начала объектов от начала файла.
xref0 60000000003 65535 f0000000017 00000 n0000000081 00000 n0000000000 00007 f0000000331 00000 n0000000409 00000 n |
- предыдущая таблица перекрестных ссылок, если в файле их несколько;
- Корень документа, представленный словарем Каталога;
- Словарь метаинформации с полями Автор, Создатель, Название, Ключевые слова, дата создания и изменения;
- Словарь шифрования, если документ зашифрован.
trailer << /Size 15 /Root 2 0 R /Info 1 0 R >>startxref6224 |
Новая таблица перекрестных ссылок и трейлер добавляются после каждого обновления документа. Оно будет описано далее в статье.
Структура документа
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 в удобочитаемом тексте, как показано на рисунке ниже.
7 0 obj << /Length 8 0 R >>stream1 0 0 1 0 0 cm0 0 m595 0 l595 842 l0 842 lhWnq/Alpha1 gs0 0 0 rg0 0 0 RG0 Jq0.96593 0.25882 -0.25882 0.96593 0 0 cm1 0 0 1 0 0.25882 cm0.02 w-0.96593 0 m0 -0.25882 l0 -0.25882 0 -0.25882 0 -0.25882 c0.14294 -0.25882 0.25882 -0.14294 0.25882 0 c0.25882 0.14294 0.14294 0.25882 0 0.25882 chSQendstreamendobj |
Помимо массива дочерних узлов (это может быть дерево страниц или узлов страниц) 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 Диске.