Чому мій 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