Что находится внутри PDF-файла: структура, объекты и скрытые данные

PDF-файл выглядит как готовый документ с фиксированной разметкой, но внутри это не «картинка страницы», а контейнер со множеством объектов: текстом, шрифтами, изображениями, векторной графикой, аннотациями и служебными данными. Понимание внутреннего устройства помогает ответить на практические вопросы: почему один PDF весит 200 КБ, а другой с тем же количеством страниц — 50 МБ; почему текст из одного файла копируется нормально, а из другого превращается в набор символов; и какие данные могут остаться в файле после редактирования.

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

Общая структура файла

Любой корректный PDF состоит из четырёх основных частей, расположенных последовательно:

  • Заголовок — первая строка с номером версии формата, например «%PDF-1.7». По ней программы определяют, что перед ними PDF и какие возможности поддерживать.
  • Тело файла — основная часть, где лежат все объекты: страницы, текстовые команды, шрифты, картинки, аннотации.
  • Таблица перекрёстных ссылок (xref) — своего рода оглавление, которое указывает, по какому смещению в байтах находится каждый объект. Благодаря ей программа открывает нужную страницу, не читая весь файл целиком.
  • Трейлер — завершающий блок со ссылкой на каталог документа, то есть на точку входа во всю структуру.

Если файл редактировался много раз без полной пересборки, в нём может быть несколько таблиц xref и несколько версий одних и тех же объектов: новые изменения дописываются в конец, а старые данные остаются внутри. Это одна из причин, почему «очищенный» на вид PDF иногда сохраняет удалённый текст.

Страницы и дерево страниц

Страницы в PDF организованы иерархически: каталог документа ссылается на дерево страниц, а оно — на отдельные объекты-страницы. У каждой страницы есть атрибуты: размер (MediaBox), поля обрезки под печать, поворот и список ресурсов — шрифтов и изображений, которые она использует.

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

Содержимое страницы: как записан текст и графика

Каждая страница имеет поток содержимого (content stream) — последовательность команд для отрисовки. Это низкоуровневые инструкции вроде «переместить перо в точку с координатами», «выбрать шрифт», «показать строку символов». Координаты задаются в пунктах (1/72 дюйма), а начало координат по умолчанию находится в левом нижнем углу страницы.

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

Шрифты и кодировка

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

Проблемы с копированием текста чаще всего связаны именно со шрифтами. Если в файле нет корректной таблицы соответствия между кодами символов и Unicode (таблицы ToMap/ToUnicode), при выделении и копировании вы получите бессмысленный набор знаков. Визуально всё отображается правильно, потому что рисуются глифы напрямую, а вот текстового слоя за ними может фактически не быть.

Изображения и векторная графика

Растровые изображения хранятся внутри PDF обычно в сжатом виде. Исторически формат поддерживает алгоритмы JPEG, Flate (аналог ZIP) и ряд специализированных; в более новых версиях добавлена поддержка JPEG 2000 и других методов. Параметры сжатия и исходное разрешение картинок — главный фактор размера файла: скан документа в 300 dpi легко занимает десятки мегабайт, а тот же документ с векторным текстом — сотни килобайт.

Векторная графика (линии, кривые, фигуры) описывается математическими командами и масштабируется без потери качества. Логотипы, схемы, чертежи в PDF почти всегда векторные — поэтому они остаются чёткими при любом увеличении.

Метаданные: что файл знает о себе и о вас

Помимо видимого содержимого, PDF содержит словарь метаданных — информацию о документе. Обычно там указаны:

  • название, автор, тема и ключевые слова;
  • программа, которой создан файл, и программа, которая его последний раз сохраняла;
  • даты создания и последней модификации;
  • иногда — версия приложения, идентификаторы документа и другие технические сведения.

Эти данные заполняются автоматически, и о них часто забывают. Если вы отредактировали чужой договор и сохранили его, в метаданных может остаться имя исходного автора и название вашей программы. Перед отправкой файла наружу метаданные стоит проверить и при необходимости очистить — большинство редакторов позволяют посмотреть их через свойства документа.

Аннотации, формы и интерактивные элементы

PDF поддерживает слой аннотаций, который существует отдельно от содержимого страницы: комментарии, выделения, заметки, штампы, ссылки. Они не «впечатаны» в страницу, а хранятся как отдельные объекты, привязанные к координатам. Это значит, что аннотации можно удалить или скрыть, не затрагивая сам документ, — и наоборот, видимая страница может выглядеть чистой, хотя слой комментариев в файле присутствует.

Заполняемые формы — ещё один тип объектов. Поля ввода, флажки и выпадающие списки описаны структурно, а введённые значения могут сохраняться в файле. Если вы заполняли форму и пересылаете её, проверьте, что значения полей соответствуют тому, что вы хотите показать получателю.

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

Сжатие и потоки данных

Почти всё содержимое — текстовые команды, изображения, встроенные шрифты — упаковано в потоки (streams), которые могут быть дополнительно сжаты. Типичный поток распаковывается универсальным алгоритмом Flate, тем же, что используется в ZIP. Поэтому попытка открыть PDF в текстовом редакторе покажет в основном двоичные данные: полезное содержимое спрятано внутри сжатых блоков.

Практический вывод: размер PDF определяется не количеством текста, а сочетанием встроенных шрифтов, разрешения и количества растровых изображений и степени сжатия. Чтобы уменьшить файл, эффективнее всего снижать разрешение и перекодировать картинки, а не «чистить текст».

Как заглянуть внутрь PDF самостоятельно

Для базовой проверки достаточно обычных инструментов:

  1. Откройте свойства документа в программе просмотра — там видны метаданные, версия формата, наличие защиты и разрешений.
  2. Используйте функцию экспорта или сохранения как текст, чтобы оценить качество текстового слоя: если копирование даёт бессмыслицу, корректного слоя в файле нет.
  3. Посмотрите список вложений и аннотаций через панель программы просмотра — так обнаруживаются скрытые комментарии и прикреплённые файлы.
  4. Для глубокого анализа существуют инспекторы структуры, которые показывают дерево объектов, шрифты и потоки в раскрытом виде; такие инструменты используют разработчики и специалисты по безопасности документов.

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

Типичные вопросы, которые решает понимание устройства PDF

Ситуация Причина внутри файла Что делать
Файл слишком большой Растровые изображения высокого разрешения, полностью встроенные шрифты, отсутствие сжатия Пересохранить со сжатием изображений, снизить разрешение сканов
Текст копируется как набор символов Нет таблицы соответствия Unicode, текст представлен кривыми или картинкой Распознать документ (OCR) или запросить исходник
Файл выглядит пустым, но весит много Остатки старых версий объектов после многократных правок, скрытые слои Пересобрать документ («печать в PDF» или оптимизация)
На другом устройстве шрифт выглядит иначе Шрифт не встроен, программа подставляет локальный аналог При создании включить встраивание шрифтов
Найдены чужие комментарии Слой аннотаций сохранён в файле Удалить аннотации перед отправкой

Чего PDF не умеет

Формат сознательно жертвует логической структурой ради точного вида. Из этого вытекают ограничения:

  • Абзацы, заголовки и списки не являются семантическими элементами, если автор специально не создал тегированную структуру (доступную версию PDF). Без неё программы чтения с экрана и конвертеры работают вслепую.
  • Редактирование «как в текстовом процессоре» невозможно по определению: любая правка — это изменение команд отрисовки, что неудобно и часто ломает вёрстку.
  • Автоматическое извлечение данных (таблиц, реквизитов) требует распознавания и эвристик, а не простого чтения.

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

Практические рекомендации

Зная устройство формата, легко сформулировать рабочие правила:

  • Перед отправкой документа наружу проверяйте метаданные, аннотации и вложения — они остаются в файле незаметно для вас, но видны получателю.
  • Для документов, которые будут печататься или публиковаться, встраивайте шрифты — иначе вид зависит от машины получателя.
  • Уменьшайте размер файла работой с изображениями, а не с текстом: именно картинки дают основной вес.
  • Для архивов и юридически значимых документов используйте пересборку файла после правок, чтобы старые версии объектов не оставались внутри.
  • Если нужен доступный для людей с нарушениями зрения документ, создавайте тегированный PDF, а не полагайтесь на обычный.

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

PEFile.ru