Оптимизация структуры или создание заново: какой инструмент подходит?
Эти две программы работают принципиально по-разному. Команда QPDF на этой странице сохраняет содержимое страниц и лишь заново записывает объекты файла, по возможности компактно. Например, она объединяет объекты в потоки объектов и заново сжимает данные Flate. При этом она не снижает разрешение изображений и не перекодирует их в JPEG. Необязательная оптимизация изображений в QPDF — отдельный этап с потерями, кратко описанный в следующем разделе. Отдельные параметры описаны в документации QPDF.
Ghostscript работает иначе. С выходным устройством pdfwrite он считывает PDF и создаёт новый файл на основе инструкций отрисовки каждой страницы. Текст и векторная графика при этом, как правило, сохраняются в своём виде, то есть страницы не превращаются просто в изображения. Однако в зависимости от настроек Ghostscript может пересчитать изображения. Кроме того, может измениться всё, что не относится к видимому изображению страницы. Это объясняется в руководстве Ghostscript по pdfwrite.
Некоторые программы предлагают и третий способ: заново выводят каждую страницу как изображение. При этом обычно теряются собственно текст, поиск и интерактивные элементы. Ни одна из двух команд на этой странице так не работает.
Ни один из этих методов не гарантирует уменьшения файла. Как общее правило: если PDF состоит главным образом из текста и векторной графики, начни с QPDF. Это относится и к случаям, когда изображения, ссылки или формы желательно изменить как можно меньше. Ghostscript может подойти, если основной объём занимают большие фотографии или сканы и ты готов ради уменьшения немного пожертвовать качеством изображений. Что именно означают сжатие без потерь и с потерями, объясняется в руководстве «Сжатие PDF без потери качества».
Программы с графическим интерфейсом используют те же подходы. По собственным сведениям PDFsam, в редакции Basic выполняется только оптимизация структуры, а в редакциях Visual и Enhanced предусмотрено отдельное сжатие изображений. Старые инструкции для скриптов файловых менеджеров или интерфейсов, вызывающих Ghostscript в фоновом режиме, отчасти относятся к прежним версиям Ubuntu. Поэтому не повторяй их шаги установки без проверки. По информации производителя, PDF24 Creator доступен только для Windows; версии для Linux он не предлагает.
Если ты не хочешь ничего устанавливать, можно использовать компрессор PDF в браузере. Он обрабатывает файл на твоём устройстве без загрузки на сервер. Однако в браузерах под Linux мы его отдельно не тестировали. Чем локальная обработка в браузере отличается от настоящей работы офлайн, рассказано в руководстве «Сжать PDF без загрузки на сервер».
Проверь версию и записывай результат в отдельный файл
Обзор команд
Выбери одну из шести команд этого руководства. Ты увидишь команду без изменений и узнаешь, что означает каждая её часть.
Команды взяты из официальных руководств QPDF и Ghostscript. Мы не запускали их самостоятельно ни в Ubuntu, ни в другом дистрибутиве. Установленные в твоей системе версии могут отличаться от версий, описанных в онлайн-документации.
Эта страница не выполняет команды и не показывает вывод терминала. Сообщения своей системы ты увидишь только после самостоятельного запуска команды.
Показать версию QPDF
Показывает установленную версию QPDF. Проверь её, прежде чем использовать остальные команды.
qpdf --versionТы также можешь выделить и скопировать команду прямо в поле кода.
Части команды
qpdfПрограмма- Вызывает программу командной строки QPDF.
--versionПоказать версию- Выводит версию QPDF, используемую в твоей системе.
Если командная оболочка сообщает, что команда не найдена, вероятно, QPDF не установлен. Название пакета и способ установки зависят от твоего дистрибутива.
Место в руководствеПоказать версию Ghostscript и устройства вывода
Показывает версию Ghostscript и доступные устройства вывода.
gs -hТы также можешь выделить и скопировать команду прямо в поле кода.
Части команды
gsПрограмма- Вызывает Ghostscript. В Unix программа называется gs.
-hСправка- Выводит версию, параметры, форматы, доступные устройства вывода и путь поиска.
Если командная оболочка сообщает, что команда не найдена, вероятно, Ghostscript не установлен. Запиши дистрибутив и версию, чтобы позже можно было разобраться в полученных результатах.
Место в руководствеСохранить структуру компактнее
Заново сохраняет объекты файла как можно компактнее. При этом разрешение изображений не уменьшается и они не перекодируются в JPEG.
qpdf "original.pdf" --object-streams=generate --compress-streams=y --decode-level=generalized --recompress-flate --compression-level=9 "optimiert-qpdf.pdf"Ты также можешь выделить и скопировать команду прямо в поле кода.
Части команды
qpdfПрограмма- Вызывает программу командной строки QPDF.
"original.pdf"Входной файл- PDF, который считывается. Результат записывается в отдельный файл.
--object-streams=generateСоздать потоки объектов- Объединяет подходящие объекты в потоки объектов и сжимает их. Версия PDF выходного файла будет не ниже 1.5.
--compress-streams=yСжать потоки- Сжимает потоки с помощью Flate, если они ещё не сжаты другим способом.
--decode-level=generalizedДекодировать фильтры общего назначения- Декодирует данные с поддерживаемыми фильтрами общего назначения, такими как LZW, Flate, ASCII85 и ASCIIHex. Данные JPEG (DCT) при этом не декодируются.
--recompress-flateПовторно сжать Flate- Распаковывает существующие потоки Flate и сжимает их заново. Из-за этого запись может занять больше времени.
--compression-level=9Уровень сжатия- Выбирает для Flate наивысший уровень zlib в документированном диапазоне от 1 до 9. Более высокие уровни требуют больше времени. Это значение не связано с качеством JPEG.
"optimiert-qpdf.pdf"Выходной файл- Имя нового файла. В обеих командах проверки он используется как входной файл.
Только сравнение количества байт покажет, стал ли новый файл меньше. Отдельное имя выходного файла не защищает от перезаписи существующего файла с таким же именем. Поэтому выбери ещё не использованное имя. Команда не гарантирует сохранение действительности цифровой подписи.
Место в руководствеПересоздать PDF с помощью pdfwrite
Ghostscript считывает PDF и создаёт новый файл из инструкций отрисовки каждой страницы, в данном случае с предустановкой /ebook.
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="optimiert-gs.pdf" "original.pdf"Ты также можешь выделить и скопировать команду прямо в поле кода.
Части команды
gsПрограмма- Вызывает Ghostscript.
-dSAFERКонтроль доступа- Ограничивает доступ к файлам и устройствам. Начиная с версии 9.50 это стандартное поведение. Общей гарантией безопасности оно не является.
-dBATCHЗавершить после обработки- Завершает Ghostscript после обработки указанных файлов, вместо перехода в интерактивный режим.
-dNOPAUSEБез пауз- Отключает запрос подтверждения и паузу в конце каждой страницы.
-sDEVICE=pdfwriteУстройство вывода- Выбирает pdfwrite, который создаёт новый PDF. Текст и векторная графика, как правило, сохраняются. Всё, что не относится к видимому изображению страницы, может измениться.
-dPDFSETTINGS=/ebookПредустановка- Задаёт набор отдельных параметров со средним разрешением изображений. Название описывает назначение, а не уровень качества и не гарантированное уменьшение размера.
-sOutputFile="optimiert-gs.pdf"Выходной файл- Задаёт имя нового файла.
"original.pdf"Входной файл- PDF, который считывает Ghostscript.
Детали изображений и функции документа могут измениться, даже если страницы выглядят одинаково. Определённый размер или качество не гарантируются. Проверь сохранённый результат и выбери ещё не использованное имя выходного файла.
Место в руководствеПроверить структуру выходного файла
Проверяет синтаксис сохранённого выходного файла. Для результата Ghostscript замени имя файла.
qpdf "optimiert-qpdf.pdf" --checkТы также можешь выделить и скопировать команду прямо в поле кода.
Части команды
qpdfПрограмма- Вызывает программу командной строки QPDF.
"optimiert-qpdf.pdf"Проверяемый файл- Ранее сохранённый результат команды QPDF.
--checkПроверить структуру- Проверяет структуру, шифрование, линеаризацию и кодирование потоков.
Код возврата 0 означает проверку без ошибок, 2 — ошибки, 3 — предупреждения. Проверяется только структура файла. Проверка не показывает, правильно ли он выглядит, работают ли формы и ссылки и безопасен ли файл.
Место в руководствеВывести количество страниц
Выводит количество страниц сохранённого выходного файла. Повторно запусти команду с именем оригинала и сравни оба числа.
qpdf "optimiert-qpdf.pdf" --show-npagesТы также можешь выделить и скопировать команду прямо в поле кода.
Части команды
qpdfПрограмма- Вызывает программу командной строки QPDF.
"optimiert-qpdf.pdf"Файл для подсчёта страниц- Ранее сохранённый результат команды QPDF.
--show-npagesПодсчитать страницы- Выводит количество страниц указанного файла.
Одинаковое количество страниц не означает, что содержимое, изображения и функции остались без изменений. Просмотри страницы самостоятельно.
Место в руководствеКнопка записывает показанную команду в буфер обмена только после твоего нажатия. Она не читает буфер обмена, ничего не сохраняет и ничего не отправляет.
Команды на этой странице взяты из официальных руководств QPDF и Ghostscript. Мы сами не выполняли их в Ubuntu или другом дистрибутиве, поэтому это не протестированная инструкция для Ubuntu. Сначала проверь, какие версии установлены в твоей системе. Пакеты твоего дистрибутива могут отличаться от версий, описанных в актуальной онлайн-документации.
Показать установленные версии
qpdf --versiongs -hЕсли оболочка сообщает, что команда не найдена, программа, вероятно, не установлена. Название пакета и способ установки зависят от твоего дистрибутива. Запиши дистрибутив и версии, чтобы позже можно было установить, в каких условиях получен результат.
Основные правила для каждой попытки
- Оставляй оригинал нетронутым. У входного и выходного файлов всегда должны быть разные имена.
- Давай каждому результату новое, ещё не использованное имя, чтобы не перезаписать предыдущий файл.
- Каждую следующую попытку начинай снова с оригинала, а не с результата предыдущего запуска.
- Не используй параметры или скрипты, которые напрямую заменяют входной файл.
QPDF: оптимизация структуры хранения
qpdf "original.pdf" --object-streams=generate --compress-streams=y --decode-level=generalized --recompress-flate --compression-level=9 "optimiert-qpdf.pdf"Команда читает original.pdf и записывает новый файл с именем optimiert-qpdf.pdf. Параметры обеспечивают объединение объектов в потоки объектов, сжатие потоков данных и повторное сжатие данных Flate с максимальной степенью. Пересчёт изображений при этом не выполняется. Для потоков объектов требуется PDF 1.5. Если получатель явно требует более старую версию PDF, эта команда не подойдёт без дополнительных изменений.
QPDF также может оптимизировать изображения и перекодировать данные JPEG с выбранным качеством. Параметр качества JPEG доступен начиная с версии 12.1. Обе операции выполняются с потерями и могут дополнительно ухудшить уже сжатые изображения JPEG. Используй их только в том случае, если затем целенаправленно проверишь изображения.
Ghostscript: перезапись PDF с использованием профиля
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="optimiert-gs.pdf" "original.pdf"-sDEVICE=pdfwrite выбирает вывод в PDF, -sOutputFile задаёт имя нового файла, а входной файл указывается в конце. -dBATCH и -dNOPAUSE не позволяют Ghostscript ожидать ввода. -dSAFER в таком виде также используется в примерах руководства Ghostscript по командной строке. Профиль /ebook — лишь отправная точка, а не рекомендация для любого файла.
Как правильно понимать профили Ghostscript
С помощью -dPDFSETTINGS ты выбираешь сразу целый набор отдельных параметров. Название профиля описывает предполагаемое применение. Оно не обозначает ни уровень качества, ни определённую экономию размера.
Значит ли это, что /prepress даёт лучшее качество? Нет. В руководстве прямо указано, что /prepress — не самая точная по отношению к оригиналу настройка. Без -dPDFSETTINGS результат может оставаться ближе к оригиналу. Самый маленький файл /prepress также не гарантирует.
Целевые значения /screen и /ebook не означают, что после обработки каждое изображение будет иметь ровно 72 или 150 dpi. Для изображений ниже порога разрешение не снижается и сохраняется прежним. Однако это не обязательно означает полное отсутствие изменений: остальные параметры профиля, например кодирование изображений или цвета, всё равно могут их изменить. Параметр -r не заменяет снижение разрешения. Он управляет разрешением только тогда, когда Ghostscript вынужден отрисовывать отдельные части вместо их обычной обработки, и не уменьшает встроенные изображения. Согласно руководству, часто лучше целенаправленно задавать отдельные параметры, чем полагаться на профиль.
Не используй один профиль для всех файлов. Текстовый документ, фотокаталог и скан реагируют по-разному. В случае сканов лучше начинать ещё на этапе сканирования. Как это сделать, объясняется в руководстве «Уменьшить отсканированный PDF».
Проверь текст, ссылки, формы и подписи
То, что PDF после сжатия выглядит так же, не доказывает сохранения всего содержимого файла. Ghostscript создаёт файл заново. Согласно объяснению Ghostscript об оптимизации PDF, за одинаковым внешним видом могут скрываться изменённые инструкции и метаданные. После QPDF также проверяй важные для тебя функции:
- Выдели и скопируй текст, попробуй поиск.
- Нажми на ссылки и закладки.
- Если файл содержит форму, заполни её поля и попробуй сохранить.
- Проверь такие сведения, как заголовок или автор, если получатель их учитывает.
- Если требуется определённый стандарт, например PDF/A, проверь соответствие с помощью предназначенного для этого инструмента. Ни одна из приведённых здесь команд не гарантирует сохранения этого статуса.
PDF с цифровой подписью
Ни одна из двух команд не может гарантировать, что цифровая подпись останется действительной после перезаписи файла. Поэтому сжатие не является способом уменьшения PDF с цифровой подписью. Сохраняй подписанный оригинал без изменений. Если документ подписал кто-то другой и тебе нужна версия меньшего размера, получи неподписанный исходный файл или свяжись с подписавшим. Повторное подписание согласуй с выдавшей документ стороной или получателем. Дополнительные сведения приведены в материале Adobe об ограничениях PDF с цифровой подписью. Отсканированное видимое изображение подписи не является цифровой подписью.
Снятие защиты паролем или ограничений на редактирование не относится к уменьшению размера, и команд для этого здесь нет. Вместо этого попроси отправителя предоставить подходящую версию. Подробнее об обращении с такими документами рассказано в руководстве «Что нужно знать о подписях и формах».
Сравни размер результата и сохрани оригинал
Выполнение команды без сообщения об ошибке ещё ничего не говорит о результате. Сравни точный размер оригинала и выходного файла в байтах, а не только округлённые значения в MB. Сколько процентов удалось сэкономить, можно рассчитать с помощью калькулятора степени сжатия.
Проверка синтаксиса и числа страниц
qpdf "optimiert-qpdf.pdf" --checkКод возврата QPDF 0 означает проверку без ошибок, 2 — ошибки, а 3 — предупреждения. Проверка касается только структуры файла. Она не показывает, сохранили ли формы, ссылки и изображения прежние функции и внешний вид.
qpdf "optimiert-qpdf.pdf" --show-npagesПроверка в программе просмотра PDF
- Заново открой сохранённый выходной файл из его папки.
- Пролистай все страницы и сравни их формат и ориентацию с оригиналом.
- Рассмотри изображения, мелкий шрифт и тонкие линии при большом увеличении.
- Проверь поиск, ссылки и формы, как описано в предыдущем разделе.
- По возможности открой файл также во второй программе просмотра.
Больше, без изменений или пустой?
Ghostscript может и увеличить PDF. Файл создаётся заново и кодируется иначе, а новые инструкции иногда занимают больше места, чем прежние. От QPDF тоже не стоит ожидать большой экономии, если файл уже сохранён компактно.
Результат большего или почти такого же размера всё равно может быть корректным. Так ли это, покажут только те же проверки сохранённого файла, что и для любого другого результата: один лишь размер ничего не говорит об ошибках или потерянных функциях. В итоге оставь более подходящий файл; часто это просто оригинал. Иначе обстоит дело с пустым, нечитаемым или повреждённым результатом. Это неудачная попытка, а не особенно сильное сжатие. Не отправляй такой файл, прочитай сообщения в терминале и начни заново, используя оригинал и новое имя выходного файла.
Если PDF по-прежнему превышает лимит получателя, дальнейшие действия описаны в руководстве «PDF не уменьшается». В любом случае сохраняй оригинал, пока новая версия не будет доставлена и принята.