Компресиране на PDF под Linux: използвай QPDF и Ghostscript според задачата

Под Linux можеш в терминала да оптимизираш структурата на PDF с документирана команда на QPDF или да го изградиш наново с Ghostscript pdfwrite. Дали новият файл е по-малък и продължава да поддържа всичко, което ти е необходимо, става ясно едва при проверката на запазения резултат.

Оптимизиране на структурата или изграждане наново: кой инструмент е подходящ?

Двете програми работят по коренно различен начин. Командата на QPDF на тази страница оставя съдържанието на страниците ти непроменено и само записва наново обектите във файла възможно най-компактно. За целта например групира обекти в обектни потоци и компресира наново Flate данни. При това нито намалява резолюцията на изображенията, нито ги прекодира като JPEG. Незадължителната оптимизация на изображения в QPDF е отделна стъпка със загуби, обяснена накратко в следващия раздел. Отделните опции са описани в документацията на QPDF.

Ghostscript работи по друг начин. С изходното устройство pdfwrite той прочита PDF файла и създава нов файл от инструкциите за изчертаване на всяка страница. При това текстът и векторната графика обикновено се запазват като такива, тоест страниците не се превръщат просто в изображения. Според настройките обаче Ghostscript може да преизчисли изображенията. Освен това може да се промени всичко, което не е част от видимия облик на страницата. Това е обяснено в ръководството на Ghostscript за pdfwrite.

Някои програми предлагат и трети подход: извеждат всяка страница наново като изображение. При това обикновено се губят текстовите данни, възможността за търсене и интерактивните елементи. Нито една от двете команди на тази страница не работи по този начин.

Три подхода за намаляване на PDF и какво променят в документа
МетодКакво се случваИзображенияТекст и функции
QPDF, оптимизиране на структуратаОбектите и Flate данните се записват по-компактноРезолюцията им не се намалява. Незадължителното прекодиране в JPEG може да доведе до загуба на детайли.Съдържанието на страниците не се изгражда наново, но все пак провери резултата
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.
qpdf --version

Можеш също да маркираш и копираш командата директно в полето с кода.

Частите на командата
qpdfПрограма
Извиква програмата за команден ред QPDF.
--versionПоказване на версията
Извежда версията на QPDF, която работи в твоята система.

Ако командният интерпретатор съобщи, че командата не е намерена, вероятно QPDF не е инсталиран. Името на пакета и начинът на инсталиране зависят от дистрибуцията ти.

Място в ръководството

Показване на версията на Ghostscript и изходните устройства

Показва версията на Ghostscript и наличните изходни устройства.

Показва версията на Ghostscript и наличните изходни устройства.
gs -h

Можеш също да маркираш и копираш командата директно в полето с кода.

Частите на командата
gsПрограма
Извиква Ghostscript. Под Unix програмата се нарича gs.
-hПомощ
Извежда версията, опциите, форматите, наличните изходни устройства и пътя за търсене.

Ако командният интерпретатор съобщи, че командата не е намерена, вероятно Ghostscript не е инсталиран. Запиши дистрибуцията и версията, за да можеш по-късно да проследиш резултатите.

Място в ръководството

По-компактно запазване на структурата

Запазва обектите във файла наново и възможно най-компактно. При това резолюцията на изображенията не се намалява и те не се прекодират като JPEG.

Команда на QPDF от документацията: записва структурата по-компактно, без да намалява резолюцията на изображенията или да ги прекодира като 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.

Пример с Ghostscript и профила /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 замени името на файла.

Проверява синтаксиса на запазения резултат. За резултата от 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.
qpdf --version
Показва версията на Ghostscript и наличните изходни устройства.
gs -h

Ако командната обвивка съобщи, че дадена команда не е намерена, програмата вероятно не е инсталирана. Името на пакета и начинът на инсталиране зависят от дистрибуцията ти. Запиши си дистрибуцията и версиите, за да можеш по-късно да проследиш как е получен даден резултат.

Основни правила за всеки опит

  • Остави оригинала непокътнат. Входният и изходният файл винаги трябва да имат различни имена.
  • Давай на всеки изходен файл ново, неизползвано досега име, за да не презапишеш по-ранен файл.
  • Започвай всеки следващ опит отново с оригинала, а не с резултата от предишното изпълнение.
  • Не използвай опции или скриптове, които директно заменят входния файл.

QPDF: оптимизиране на структурата за съхранение

Команда на QPDF от документацията: записва структурата по-компактно, без да намалява резолюцията на изображенията или да ги прекодира като JPEG.
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 с профил

Пример с Ghostscript и профила /ebook. При това детайлите в изображенията и функциите на документа могат да се променят.
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 избираш наведнъж цял набор от отделни параметри. Името на профила описва предназначението му. То не означава нито степен на качество, нито определено намаление на размера.

Профили за -dPDFSETTINGS според актуалното ръководство на Ghostscript (версия 10.09.0). Инсталираната при теб версия може да е различна.
ПрофилПредназначениеНамаляване на резолюцията на цветни изображения и изображения в сиви тонове
/screenПреглед на екран, ниска резолюцияАктивно. Целева стойност 72 dpi, само за изображения с резолюция над 1,5 пъти тази стойност.
/ebookСредна резолюцияАктивно. Целева стойност 150 dpi, само за изображения с резолюция над 1,5 пъти тази стойност.
/printerПечатНе е активирано по подразбиране
/prepressПредпечатна подготовкаНе е активирано по подразбиране. Не е автоматично изборът с най-вярно възпроизвеждане на оригинала.
/defaultШирока употребаНе е активирано по подразбиране

Тогава /prepress означава ли най-добро качество? Не. Ръководството изрично посочва, че /prepress не е настройката с най-вярно възпроизвеждане на оригинала. Без -dPDFSETTINGS резултатът може да остане по-близък до оригинала. /prepress също не гарантира най-малък файл.

Целевите стойности при /screen и /ebook не означават, че след това всяко изображение има точно 72 или 150 dpi. Резолюцията на изображенията под прага не се намалява и те запазват своята резолюция. Това обаче не означава непременно, че остават напълно непроменени, защото останалите параметри на профила, например за кодиране на изображения или за цветове, все пак могат да ги променят. Опцията -r не замества намаляването на резолюцията. Тя управлява само резолюцията, когато Ghostscript трябва вместо това да растеризира отделни части, и не намалява вградените изображения. Според ръководството често е по-добре да задаваш целенасочено отделни параметри, вместо да разчиташ на профил.

Не използвай един профил за всички файлове. Текстов документ, каталог със снимки и сканиран документ реагират различно. При сканираните документи е най-добре да започнеш още от сканирането. Как става това, обяснява ръководството Намали размера на сканиран PDF.

Провери текста, връзките, формулярите и подписите

Това, че след компресирането PDF изглежда по същия начин, не доказва, че всичко съхранено е запазено. Ghostscript изгражда файла наново. Според обяснението на Ghostscript за оптимизирането на PDF еднаквият външен вид може да прикрива променени инструкции и метаданни. И след QPDF проверявай функциите, които са важни за теб:

  • Маркирай и копирай текст и изпробвай търсенето.
  • Щракни върху връзките и отметките.
  • Ако файлът е формуляр, попълни полетата и ги запази пробно.
  • Провери данни като заглавие или автор, ако получателят ги използва.
  • Ако се изисква определен стандарт като PDF/A, провери съответствието с предназначен за това инструмент. Нито една от командите тук не гарантира запазването на този статус.

Цифрово подписани PDF файлове

Нито една от двете команди не може да ти гарантира, че цифровият подпис ще остане валиден след презаписването. Затова компресирането не е начин за намаляване на подписан PDF. Запази подписания оригинал непроменен. Ако друг човек е подписал документа и ти е необходима по-малка версия, поискай неподписания изходен файл или разговаряй с подписалия. Съгласувай повторното подписване с издателя или получателя. Допълнителна информация предлага Adobe за ограниченията на подписаните PDF файлове. Сканиран видим подпис не е цифров подпис.

Премахването на защита с парола или на ограничения за редактиране не е част от намаляването на размера и тук няма да намериш команди за това. Вместо това помоли изпращача за подходяща версия. Повече за работата с такива документи има в ръководството Разбери подписите и формулярите.

Сравни размера на резултата и запази оригинала

Това, че команда се изпълнява без съобщение за грешка, все още не казва нищо за резултата. Сравни точния размер на оригинала и изходния файл в байтове, а не само закръглени стойности в MB. Какъв процент си спестил, можеш да изчислиш с калкулатора за степен на компресиране.

Провери синтаксиса и броя страници

Проверява синтаксиса на запазения резултат. За резултата от Ghostscript замени името на файла.
qpdf "optimiert-qpdf.pdf" --check

QPDF връща код 0 при проверка без грешки, 2 при грешки и 3 при предупреждения. Проверката се отнася само до структурата на файла. Тя не показва дали формулярите, връзките и изображенията все още работят и изглеждат както преди.

Извежда броя страници на запазения резултат. Изпълни командата отново с името на оригинала и сравни.
qpdf "optimiert-qpdf.pdf" --show-npages

Проверка в програма за преглед на PDF

  1. Отвори наново запазения изходен файл от папката му.
  2. Прегледай всички страници и сравни формата и ориентацията им с оригинала.
  3. Разгледай изображенията, дребния шрифт и фините линии при голямо увеличение.
  4. Тествай търсенето, връзките и формулярите, както е описано в предишния раздел.
  5. По възможност отвори файла и във втора програма за преглед.

По-голям, непроменен или празен?

Ghostscript може и да увеличи PDF файла. Файлът се изгражда наново и се кодира по различен начин, а новите инструкции понякога заемат повече място от старите. При QPDF също няма голяма възможност за намаляване, ако файлът вече е записан компактно.

По-голям или съвсем малко по-малък резултат все пак може да бъде валиден. Дали е такъв, става ясно едва след същите проверки на запазения файл, както при всеки друг резултат, защото размерът сам по себе си не казва нищо за грешки или загубени функции. Накрая запази по-подходящия файл; често това е просто оригиналът. Различно е при празен, нечетлив или повреден резултат. Това е неуспешен опит, а не особено силно компресиране. Не изпращай този файл, прочети съобщенията в терминала и започни отново с оригинала и ново име за изходния файл.

Ако PDF остава прекалено голям за лимита на получателя, следващите стъпки ще намериш в ръководството PDF не става по-малък. Във всички случаи пази оригинала, докато новата версия бъде получена и приета.

Настройки за поверителност

Изберете дали да разрешите незадължителните анализи и реклами. В този непубликуван предварителен преглед и двете остават изключени дори ако ги разрешите. Инструментите за документи работят независимо от избора ви. Можете да промените избора си по всяко време от долната част на страницата.

Необходими настройки

Задължително

Изборът ви и цветовата тема се запазват локално. Инструментите за документи са достъпни и без незадължителните услуги.

Неактивно

Незадължително измерване на използването. В момента не е активно: разрешението запазва избора ви, но не включва услуга за анализи в този предварителен преглед.

Неактивно

Незадължителни реклами. В момента не са активни: разрешението запазва избора ви, но не включва рекламна услуга в този предварителен преглед.

Незадължителните анализи и реклами са изключени.