Оптимизиране на структурата или изграждане наново: кой инструмент е подходящ?
Двете програми работят по коренно различен начин. Командата на 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" --checkQPDF връща код 0 при проверка без грешки, 2 при грешки и 3 при предупреждения. Проверката се отнася само до структурата на файла. Тя не показва дали формулярите, връзките и изображенията все още работят и изглеждат както преди.
qpdf "optimiert-qpdf.pdf" --show-npagesПроверка в програма за преглед на PDF
- Отвори наново запазения изходен файл от папката му.
- Прегледай всички страници и сравни формата и ориентацията им с оригинала.
- Разгледай изображенията, дребния шрифт и фините линии при голямо увеличение.
- Тествай търсенето, връзките и формулярите, както е описано в предишния раздел.
- По възможност отвори файла и във втора програма за преглед.
По-голям, непроменен или празен?
Ghostscript може и да увеличи PDF файла. Файлът се изгражда наново и се кодира по различен начин, а новите инструкции понякога заемат повече място от старите. При QPDF също няма голяма възможност за намаляване, ако файлът вече е записан компактно.
По-голям или съвсем малко по-малък резултат все пак може да бъде валиден. Дали е такъв, става ясно едва след същите проверки на запазения файл, както при всеки друг резултат, защото размерът сам по себе си не казва нищо за грешки или загубени функции. Накрая запази по-подходящия файл; често това е просто оригиналът. Различно е при празен, нечетлив или повреден резултат. Това е неуспешен опит, а не особено силно компресиране. Не изпращай този файл, прочети съобщенията в терминала и започни отново с оригинала и ново име за изходния файл.
Ако PDF остава прекалено голям за лимита на получателя, следващите стъпки ще намериш в ръководството PDF не става по-малък. Във всички случаи пази оригинала, докато новата версия бъде получена и приета.