Почему мой PDF почти не уменьшился?
Прогнал PDF через компрессор: было 4,1 MB, стало 4,0 MB. Инструмент сломан?
PDF — это картотечный шкаф
Разочарование берётся из представления, будто PDF — это картинка документа. Это не так. PDF в том виде, в каком его определяет ISO 32000, — контейнер пронумерованных объектов: деревья страниц, потоки содержимого, полные операторов рисования, встроенные шрифтовые программы, изображения-XObject, поля форм, аннотации, закладки и таблица перекрёстных ссылок, которая указывает, где начинается каждый объект.
Большинство этих объектов уже сжаты. Потоки содержимого обычно закодированы Flate — тем же алгоритмом, который использует ZIP. Встроенные фотографии обычно хранятся как потоки DCT, то есть данные JPEG, пропущенные внутрь без изменений. Так что универсальный архиватор, глядя на PDF, видит коробку вещей, каждая из которых уже сжата один раз.
Выясните, где лежат байты, прежде чем что-то сжимать
Самая полезная диагностика — понять, какого типа у вас документ, потому что это предсказывает результат почти полностью.
| Тип документа | Где лежат байты | Что может дать структурное пересохранение |
|---|---|---|
| Текстовый отчёт из текстового редактора | Встроенные шрифтовые программы и небольшие потоки содержимого | Очень мало: содержимое и так плотное |
| Отсканированные страницы | По одному крупному изображению на страницу | Почти ничего, если не трогать изображения |
| Экспорт презентации | Встроенные фотографии и градиенты | Кое-что, если изображения дублируются на слайдах |
| Инженерный чертёж | Длинные векторные потоки содержимого | Кое-что — за счёт перекодирования потоков и удаления неиспользуемых объектов |
| Форма с вложениями | Встроенные файлы, JavaScript, словари аннотаций | Много, если лишнее можно удалить |
Что на самом деле убирает структурное пересохранение
Структурное пересохранение переписывает документ, не меняя вида ни одной страницы. Оно способно выбросить объекты, на которые больше ничто не ссылается, — а они накапливаются при каждом инкрементном сохранении после правки. Оно способно сжать таблицу перекрёстных ссылок и упаковать мелкие объекты в потоки объектов. Оно способно выбросить метаданные документа, миниатюры и историю правок, которую оставляют после себя некоторые генераторы.
На документе, который правили и пересохраняли множество раз, выигрыш может быть большим. На документе, один раз аккуратно экспортированном из текстового редактора, собирать нечего: файл уже близок к самой компактной своей форме, и сто килобайт, снятые с четырёх мегабайт, — ровно тот результат, которого следует ожидать.
Почему текстовый документ сопротивляется
В текстовом PDF значительную долю файла обычно занимают встроенные шрифты. Шрифтовая программа — компактный двоичный блок с контурами глифов и инструкциями хинтинга, и она там потому, что документ обязан отображаться одинаково на машине, где эта гарнитура не установлена. Сжать её до исчезновения нельзя: либо сильнее урезать набор символов, либо удалить, а удаление меняет вид страницы.
Сам текст крошечный. Сто страниц прозы — это несколько сотен килобайт символов ещё до сжатия. Если ваш текстовый PDF велик, смотрите на шрифты и на изображения, спрятанные за текстом, — логотип, повторяющийся в колонтитуле, фоновый водяной знак, — а не на слова.
Почему скан схлопывается
Отсканированная страница — это одна большая фотография листа бумаги, снятая часто с разрешением 300 точек на дюйм и выше. Страница A4 при 300 DPI — это примерно 2480 × 3508 пикселей, почти девять миллионов, притом что информационное содержимое страницы — несколько килобайт текста. Поэтому сканы так резко отзываются на растровое сжатие: снижение разрешения рендеринга и перекодирование изображений страниц бьёт ровно по той части файла, которая действительно велика.
По той же причине этот режим разрушителен. Как только страница превращается в картинку, исчезают текстовый слой с поиском, ссылки, поля форм, аннотации, теговая структура доступности и любая цифровая подпись. FileSlimmer выделяет растеризацию в отдельный, явно помеченный режим с этим предупреждением, а не подсовывает её молча, когда структурное пересохранение разочаровало.
Почему никто не может пообещать вам число
Целевой размер для PDF — это поиск по разрешению рендеринга и качеству изображений, и у поиска есть нижняя граница: ниже некоторого разрешения текст на скане перестаёт читаться. Уложится ли конкретный документ в конкретный бюджет, не опускаясь ниже этой границы, зависит от числа страниц, плотности печати, объёма фотографического содержимого и шума сканера. Два документа с одинаковым числом страниц могут прийти к совершенно разным размерам.
Честное поведение — остановиться на нижней границе и сообщить, где поиск встал; именно так работают пресеты целевого размера PDF в FileSlimmer. Инструмент, который всегда попадает в введённое вами число, либо врёт об этом числе, либо уничтожает документ, чтобы до него добраться.
Прежде чем винить инструмент
- Проверьте, не скан ли этот PDF. Попробуйте выделить строку текста: если курсор ничего не выделяет, каждая страница — изображение.
- Сопоставьте число страниц с размером. Файл на 40 MB из трёх страниц перегружен изображениями; файл на 40 MB из 900 страниц может быть вполне разумным.
- Проверьте, не зашифрован ли документ. PDF под паролем вообще нельзя перестроить, пока он не разблокирован.
- Проверьте, не подписан ли он. Перезапись подписанного документа делает подпись недействительной, а это обычно хуже, чем большой файл.
- Проверьте, что вам на самом деле нужно. Выделить те шесть страниц, которые надо отправить, часто выгоднее, чем сжимать все девяносто.
Инструменты для этого
Источники
- ISO 32000-2 — Document management, Portable Document Format
- Adobe — PDF 32000-1:2008, the freely published PDF 1.7 specification
- PDF Association — ISO 32000 and the PDF standards family