Перейти к содержимому
PulsarKit

Сжать PDF до нужного размера файла, а не просто «поменьше»

Обычное сжатие PDF дает тот размер, который случайно получится. Попасть в конкретный лимит — для письма или ограничения на загрузку — это уже другая задача.

Автор: PulsarKit · ·

Качество и целевой размер — это разные запросы

Обычное сжатие работает так: выберите уровень качества — щадящий, рекомендуемый, сильный — и посмотрите, какого размера файл в итоге получится. Это правильный подход, когда важнее всего качество. Но если нужно уложиться в конкретное число (двадцать пять мегабайт для вложения к письму, два мегабайта для лимита загрузки в веб-форме), это уже другая задача. Фиксированный уровень качества не может заранее знать, какой размер он даст для этого документа. Чтобы попасть в точное число, нужно считать не «от качества к размеру», а наоборот — «от нужного размера назад к настройкам».

Чтобы попасть в число, нужно искать, а не один раз угадывать

Надежный способ попасть в целевой размер — это поиск, и именно его выполняет режим целевого размера в «Сжать PDF». Сначала пробуется какое-то качество, измеряется реальный размер получившегося файла, затем качество повышается или понижается в зависимости от того, насколько результат промахнулся. И так несколько раз, а не один выбор числа в надежде, что оно подойдет. Каждый такой проход — это полная перекодировка всех изображений в документе, поэтому «прицельное» сжатие заметно дольше одного прогона с фиксированным качеством. Эти дополнительные секунды — цена за точный размер вместо примерного. Разумный алгоритм останавливается сразу, как только результат оказывается чуть меньше целевого значения, а не продолжает уменьшать файл дальше. Дальнейший поиск только тратит время и уже ничему важному не помогает.

Некоторые цели ниже физически возможного

Текст, встроенные шрифты и векторная графика внутри PDF имеют свой неизжимаемый «вес». Никакое сжатие изображений их не уменьшит, потому что это не растровые картинки. Если одни только шрифты и текст в документе уже весят больше, чем вы запросили, никакой уровень качества не позволит уложиться в этот предел. Если измерить размер файла без изображений до начала поиска, этот нижний предел виден сразу, а не спустя несколько минут бесполезных попыток. Лучше, когда инструмент сразу сообщает минимально достижимый размер, чем когда он без предупреждения превышает запрошенный лимит и возвращает файл больше, чем нужно.

Текст остается четким при любом целевом размере

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

Если минимально возможный размер все равно слишком большой

Бывает, что в документе слишком много страниц с растровым содержимым, и в заданный размер они не помещаются. В такой ситуации выход — не еще меньшее число, а меньше страниц. Помогает разделить файл на части в «Разделить PDF» и сжимать каждую по отдельности до того же лимита: нижний предел размера растет вместе с количеством страниц. Работает и вариант убрать в «Удалить страницы» те страницы, которые не нужны для задачи, ради которой вообще важен лимит. Третий, самый радикальный способ — превратить текстовый документ в обычный текстовый файл через «PDF в текст». Об этом полезно знать на случай, когда не помогает уже ничто другое.

Что значат цифры: DPI, качество и нижний предел

Вес каждой картинки в PDF определяют два числа. Разрешение задает, сколько пикселей нужно хранить: страница A4, отсканированная в 300 DPI, содержит около 8,7 миллиона пикселей, та же страница в 150 DPI — четверть от этого, а в 96 DPI — около десятой части. Качество JPEG задает, сколько байт остается на каждый пиксель: 85 почти неотличимо от оригинала, а при 45 фотографии заметно мутнеют. Разрешение — более грубый рычаг, поэтому режим целевого размера в «Сжать PDF» сначала подбирает качество, но только до 45, как у уровня «Экстремальное»: прежде чем опустить качество ниже, он снижает разрешение.

Поиск начинается с качества 65 и затем пробует 45 — оба раза в полном разрешении. Если файл все еще больше цели, картинки ограничиваются 300, 150, 96 и наконец 72 DPI, на каждом шаге с качеством 45, а шаг, который не изменил бы картинки этого документа, пропускается; только на 72 DPI качество опускается до 20. На первом шаге, где файл уложился, качество снова поднимается к цели, и поиск останавливается, как только файл попадает в промежуток от 90 до 100 процентов цели, — самое большее за восемь сборок, так что на запрос 1 МБ обычно получается файл 0,9–1 МБ. Качество 20 при 72 DPI — практический нижний предел: он измеряется, как только файл открыт в режиме целевого размера, и цели ниже него заблокированы.

Инструменты из этой статьи

Читать дальше