PDF

20 сентября 2026 · ~15 мин чтения

формат-данных стандарт документы печать adobe

PDF

PDF (Portable Document Format, «переносимый формат документа») — формат файла, который описывает не текст сам по себе, а готовую страницу: что нарисовать, каким шрифтом и в какой точке листа. Из-за этого он выглядит одинаково везде — и по той же причине его тяжело редактировать и тяжело извлекать из него данные.

История

Началось всё с PostScript. В 1982 году Джон Уорнок и Чак Гешке ушли из
исследовательского центра Xerox PARC и основали Adobe Systems. Их первым
продуктом стал язык описания страниц PostScript (1984): принтер получал не
картинку, а маленькую программу, которая рисовала страницу. Именно PostScript
вместе с лазерным принтером Apple LaserWriter и программой Aldus PageMaker
сделал в 1985 году настольную издательскую революцию.

Но у PostScript был изъян: это полноценный язык программирования. Чтобы узнать,
что нарисовано на 300-й странице, нужно выполнить программу с самого начала.
Перелистывать документ так нельзя.

В 1991 году Уорнок написал внутреннюю записку под названием «The Camelot
Project»
. Идея: взять из PostScript графическую модель, выкинуть
программируемость, добавить оглавление объектов — и получить формат, в котором
документ можно открыть на любой странице мгновенно. Проект получил название
Carousel, а формат — PDF.

Вехи:

Текущий статус: открытый международный стандарт. Adobe по-прежнему главный
игрок в инструментах (Acrobat), но не владелец формата. Развитие ведёт
комитет ISO TC 171/SC 2.

Что это такое

PDF — это контейнер с описанием готовых страниц. Внутри файла лежит набор
пронумерованных объектов: словари, массивы, числа, строки, имена и потоки
(streams) — куски сжатых данных. Один объект описывает страницу, другой —
шрифт, третий — встроенную картинку, четвёртый — последовательность команд
рисования.

Ключевое слово — готовых. В файле Word хранится смысл: «это заголовок
второго уровня, это абзац, это элемент списка». Как всё это ляжет на бумагу,
решит программа в момент показа — и решит по-разному, если у тебя нет нужного
шрифта. В PDF решение уже принято и зафиксировано: «глиф буквы Ж из шрифта
PT Sans, кегль 11, координаты 72.0 по X и 689.4 по Y». Шрифт при этом обычно
лежит внутри файла — поэтому и получается, что документ выглядит одинаково у
всех.

Отсюда все свойства формата, и хорошие, и плохие.

PDF vs DOCX. DOCX — исходник, PDF — результат. DOCX перетекает под ширину
окна, PDF — нет. DOCX правится легко, PDF — с мучениями. Отправлять контракт
клиенту нужно в PDF, а править у себя — в DOCX.

PDF vs HTML. HTML описывает структуру и отдаёт вёрстку браузеру:
подстраивается под экран, под размер шрифта, под слабовидящего с программой
чтения. PDF намертво фиксирует лист формата A4. В вебе HTML выигрывает всегда,
на печати — всегда PDF.

PDF vs картинка (JPEG/PNG/скан). Сканы — это растр: буквы там — просто
пиксели, искать по ним нельзя. В нормальном PDF текст остаётся текстом. Но
внимание: PDF может содержать скан — тогда это картинка в обёртке PDF, и
искать в ней нечего, пока не прогонишь OCR (распознавание текста).

PDF vs PostScript. Родитель и потомок. PostScript — программа, PDF —
структура данных с оглавлением. PostScript печатает, PDF ещё и хранит.

У формата есть официальные подмножества — урезанные профили под задачу:

Аналогии из жизни

Фотография документа против самого документа. PDF — как качественный
фотоснимок разложенной на столе бумаги: всё на месте, ничего не поедет.

Где работает: объясняет главное — вид зафиксирован, получатель видит ровно
то же, что отправитель.
Где ломается: фотография — плоская, а PDF нет. Внутри него живёт текст, его
можно выделить и скопировать; живут слои, поля форм, закладки, вложенные
файлы, иногда целые видеоролики. И — важное — в фотографии не остаётся того,
что ты замазал маркером, а в PDF остаётся: закрасил чёрным
прямоугольником — сам прямоугольник нарисовался поверх, а текст под ним никуда
не делся и прекрасно копируется.

Кухня: рецепт против сервированной тарелки. HTML — рецепт: подстроится под
четыре порции или под две. PDF — уже собранное и украшенное блюдо: ничего не
пересоберёшь, зато у всех гостей одинаковое.

Где работает: передаёт разницу между «описанием намерения» и «готовым
результатом», и почему результат нельзя отмотать назад дёшево.
Где ломается: блюдо нельзя разобрать на ингредиенты, а PDF — можно, пусть и
грязно: текст вытаскивается, картинки достаются, страницы режутся и
склеиваются. Плюс у блюда нет слоя метаданных, а у PDF есть — автор, дата,
программа-создатель, а иногда и путь к папке на чужом компьютере.

Театр: список реплик рабочему сцены. Внутри PDF страница описана командами
вроде «перейди в точку 72, 700», «возьми шрифт F1 размером 11», «напиши вот
эти буквы». Это не текст страницы, это инструкции постановщику.

Где работает: объясняет главную боль формата — почему извлечение текста
вечно ломается. Команды можно выдавать в любом порядке: сначала нижняя строка,
потом верхняя; пробел между словами часто не пишется вовсе, вместо него просто
сдвиг координаты. Программа-извлекатель вынуждена угадывать, где кончилось
слово.
Где ломается: в театре есть сценарий, по которому реплики выстроены в
осмысленном порядке. В PDF такого сценария по умолчанию нет — если только
автор не сделал «тегированный PDF» (tagged PDF), где структура прописана
отдельно. Большинство файлов в мире не тегированы.

PDF не знает, что такое абзац

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

Как это работает

Физически файл устроен так:

%PDF-1.7                 <- заголовок, первые байты файла
1 0 obj ... endobj       <- тело: пронумерованные объекты
2 0 obj ... endobj
...
xref                     <- таблица перекрёстных ссылок:
0000000017 00000 n          смещение каждого объекта в байтах
...
trailer << /Root 1 0 R >>  <- трейлер: где корень документа
startxref
116543                   <- смещение таблицы xref
%%EOF

Разбор идёт с конца. Читалка прыгает в хвост файла, находит startxref,
по нему — таблицу xref, а в ней смещение любого объекта в байтах. Захотел
открыть страницу 300 — прыгнул прямо к ней, не читая предыдущие. Это и есть то
самое отличие от PostScript, ради которого формат затевали.

Дерево объектов примерно такое:

Catalog (корень)
 └── Pages (дерево страниц)
      ├── Page 1
      │    ├── Resources: шрифты, картинки, цветовые профили
      │    └── Contents: поток команд рисования
      └── Page 2 ...

Поток команд (content stream) — обратная польская запись, операнды идут перед
оператором:

BT              % begin text - начали текстовый блок
/F1 11 Tf       % шрифт F1, кегль 11
72 700 Td       % встали в точку (72, 700) от левого нижнего угла
(Привет) Tj     % нарисовали строку
ET              % end text

Координаты — в пунктах (point), 1/72 дюйма. Лист A4 — 595 × 842 пункта.
Начало координат внизу слева, как в математике, а не вверху, как в вебе.

Дальше — сжатие. Каждый поток проходит через фильтр: FlateDecode (тот же
deflate, что в zip), DCTDecode (это JPEG внутри), CCITTFaxDecode (чёрно-белые
факсовые сканы), JBIG2Decode. Поэтому PDF в блокноте выглядит как каша из
бинарного мусора: читаемая только структура, а содержимое — сжатые потоки.

Шрифты встраиваются, обычно с сабсеттингом (subsetting): в файл кладут не
весь шрифт, а только реально использованные глифы. Поэтому имена шрифтов внутри
PDF часто выглядят как ABCDEF+PTSans-Bold — шесть случайных букв означают
«это огрызок, а не полный шрифт».

Отдельная механика — инкрементальные обновления. Когда ты правишь PDF
редактором, старые байты часто не переписываются: в конец файла дописывается
новая порция объектов и новая таблица xref, которая ссылается на предыдущую.
Файл растёт слоями, как годичные кольца. Плюс — правка мгновенная даже для
файла на 500 МБ, и цифровая подпись предыдущей версии не ломается. Минус —
предыдущие версии остаются внутри файла.

Замазанное чёрным — не удалённое

Два разных действия. Нарисовать поверх текста чёрный прямоугольник — косметика: текст остаётся в потоке и копируется мышкой. Настоящее удаление называется redaction (вымарывание) и требует пересборки содержимого страницы. На этом регулярно горят и юристы, и госорганы, и корпорации: опубликованный документ открывают текстовым поиском и читают «скрытое». Проверка простая: выдели закрашенное место, скопируй, вставь в блокнот.

Безопасность в PDF — это отдельная история. Формат поддерживает шифрование
(исторически RC4 40 и 128 бит — сегодня это несерьёзно, затем AES-128, в
PDF 2.0 — AES-256), причём паролей два: пользовательский (без него файл не
откроется) и владельческий (снимает ограничения на печать и копирование).
Ограничения на печать — договорённость, а не защита: файл расшифрован,
запрет лежит внутри него флажком, и любая непослушная читалка его
проигнорирует.

Ещё формат умеет выполнять JavaScript, открывать внешние файлы и показывать
формы. Отсюда вереница уязвимостей: примерно с 2008 по 2012 год Adobe Reader
стабильно входил в тройку самых атакуемых программ на десктопе, и «просто
открыть PDF» было реальным способом поймать заражение. Сегодня читалки
запускают разбор в песочнице и по умолчанию глушат скрипты.

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Практически все. Несколько ориентиров:

Альтернативы и конкуренты

HTML (+ CSS Paged Media)
Плюсы: живой, доступный, подстраивается под экран, легко генерируется,
индексируется поисковиками, бесплатен для всех.
Минусы: нет понятия «страница» в исходном виде, печать выглядит по-разному в
разных браузерах, не подписывается юридически, не годится для типографии.

DjVu
Плюсы: для сканов чёрно-белых книг сжимает в разы лучше PDF за счёт словаря
повторяющихся форм букв.
Минусы: практически умер — нет поддержки в браузерах и телефонах, экосистема
инструментов заброшена. Живёт в основном в библиотеках старых сканов.

EPUB
Плюсы: перетекающий текст, книга читается на телефоне человечно, внутри по
сути HTML.
Минусы: вёрстка не фиксирована, поэтому не годится ни для договора, ни для
печати, ни для документа со сложной вёрсткой.

XPS / OpenXPS (Microsoft, ECMA-388)
Плюсы: технически аккуратный формат, задумывался как прямой ответ PDF.
Минусы: проиграл всухую. Microsoft сама фактически свернула продвижение.
Хороший пример того, что победа формата — вопрос экосистемы, а не качества
спецификации.

TIFF (многостраничный)
Плюсы: индустриальный стандарт сканирования, прост как палка, не содержит
исполняемого кода.
Минусы: чистый растр — никакого текста, огромный размер, никакой интерактивности.

Когда НЕ стоит использовать

Связанные понятия

Литература и источники

Где встретилось у меня

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

Краткое резюме