Коротко
Почти весь размер тяжёлого PDF приходится на изображения. Страница набранного текста весит 20–50 КБ, цветная страница, отсканированная с разрешением 300 dpi, весит 1–3 МБ. Сжать PDF значит перекодировать эти изображения с меньшим разрешением или качеством; больше в файле уменьшать нечего. Если документ в основном текстовый и всё равно слишком большой, его неправильно создали, и исправлять нужно иначе.
Где находятся байты
Если открыть структуру PDF, в нём окажется три вида содержимого:
- Текст и векторная графика: хранятся как компактные инструкции («нарисовать этот глиф здесь») и уже сжаты тем же алгоритмом, что и ZIP. Роман на 100 страниц занимает меньше 1 МБ. Здесь выиграть нечего.
- Шрифты: встраиваются, чтобы файл везде выглядел одинаково. Полный шрифт CJK может весить 5–15 МБ, но программы, создающие PDF, обычно встраивают только использованные глифы (так называемое подмножество), и вес падает до десятков килобайт. PDF, тяжёлый из-за шрифтов, экспортировали с отключённым подмножеством. Экспортируйте его заново, сжатие тут не поможет.
- Изображения: фотографии, сканы, логотипы и обычный виновник, отсканированная страница, то есть одно большое изображение на страницу, что бы на ней ни было.
Договор аренды на 12 страниц, отсканированный телефоном, состоит из двенадцати JPEG по 3–4 мегапикселя. Отсюда и взялись 25 МБ, и именно на них спотыкается форма загрузки.
Что делает «сжатие PDF»
Компрессор PDF делает одну полезную вещь: находит каждое изображение, декодирует его и снова кодирует в меньшем размере, с более низким качеством JPEG, меньшим разрешением или и тем, и другим. Текстовый слой, ссылки и закладки остаются нетронутыми. Значение имеют три настройки:
- Разрешение. 300 dpi нужны для распознавания текста и печати. На экране 150 dpi выглядят так же, а пикселей в них вчетверо меньше. Форму, которую будут только смотреть на экране, можно опустить до 100–120 dpi. Если уменьшить разрешение вдвое, изображение станет вчетверо легче; это самый сильный рычаг.
- Качество JPEG. Переход с 95 на 75 экономит примерно 60 % почти без видимой разницы на документе. Ниже 60 края букв начинают расплываться.
- Цвет. Скан чёрно-белой формы, сохранённый в RGB, несёт три канала информации при одном канале содержимого. Перевод в оттенки серого экономит треть, а перевод чистой текстовой страницы в настоящий чёрно-белый режим (1 бит, кодирование CCITT или JBIG2) может сэкономить 90 %.
Сжать PDF делает это в браузере: документ декодируется с помощью PDF.js на вашем компьютере, каждое изображение перекодируется, файл собирается заново через pdf-lib, а итоговый размер показывается до скачивания. Если результат получился бы больше оригинала, инструмент оставляет оригинал. Так бывает, когда изображения уже были небольшими, и это значит, что для этого файла сжатие не решение.
Когда сжатия не хватит
- Лимит крошечный, а документ длинный. Скан на 40 страниц не поместится в 2 МБ ни при каком читаемом качестве. Разделите его и оставьте страницы, которые форма действительно требует: большинство полей «загрузите договор» ждут страницу с подписями, а не приложения.
- Файл уже сжат. Повторный прогон компрессора только ухудшает изображения. Если инструмент сообщает об экономии в несколько процентов, остановитесь.
- Вес в шрифтах или вложенных файлах. Некоторые PDF содержат вложения, 3D-модели или полные шрифты. Экспортируйте заново из исходного документа (Word, Google Документы, графический редактор) с настройками «стандартный» или «минимальный размер».
- Это скан того, что должно было быть текстом. Напечатанное и отсканированное письмо в 100 раз тяжелее самого письма. Если оригинал есть, экспортируйте его заново. Если есть только скан, распознавание текста размер не уменьшит: изображение останется, а текст добавится поверх.
В каком порядке пробовать
- Проверьте, что внутри: если это скан, рассчитывайте на сжатие; если набранный текст, на повторный экспорт.
- Сожмите с 150 dpi и качеством 75. Одно это решает большинство случаев «25 МБ → меньше 5 МБ».
- Всё ещё много: оттенки серого, затем 120 dpi.
- Всё ещё много: разделите файл и отправьте только нужные страницы.
- Крайняя мера: PDF в изображения с умеренным разрешением, затем Изображения в PDF. Всё превращается в один JPEG на страницу, и вы напрямую управляете количеством пикселей. Текстовый слой теряется, поэтому так стоит поступать только с документами, в которых никто не будет искать или копировать текст.
Две проверки после
Откройте результат и увеличьте самый мелкий текст: подписи, сноски, текст печатей. Пересжатие проявляется прежде всего там. И если PDF был подписан электронной подписью с сертификатом, любое перекодирование делает подпись недействительной: получатель увидит «изменён после подписания». Для таких файлов единственный безопасный способ уменьшить размер состоит в разделении, но и оно нарушает подпись. Отправьте оригинал и договоритесь о лимите.