Перейти к основному содержимому
Tooletto

Почему мой PDF-файл такой большой? (И как это действительно исправить)

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

· 4 мин чтения

PDF — это контейнер, и сам контейнер крошечный

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

Самая распространённая причина: отсканированные страницы, сохранённые в разрешении для печати

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

Это же объясняет, почему отсканированный PDF так резко реагирует на сжатие, в отличие от PDF, действительно основанного на тексте: перекодирование каждого изображения страницы в более низком разрешении, но всё ещё подходящем для экрана, с более агрессивным, но по-прежнему разумным уровнем сжатия способно уменьшить отсканированный документ на 70–90% почти без заметной потери читаемости на экране, потому что оригинал нёс в себе гораздо больше пиксельных данных, чем экран вообще способен использовать.

Встроенные шрифты и почему они значат больше, чем большинство думает

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

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

Остаточная история правок и избыточная внутренняя структура

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

Что действительно помогает, а что нет

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

Похожие инструменты

Ещё в блоге