Musel som pracovať s množstvom naskenovaných PDF dokumentov, ktoré boli uložené veľmi neoptimálnym spôsobom — každý mal až desiatky MB. Toto nebolo vhodné na odosielanie e-mailom a bolo to zbytočné. Na Macu mojej priateľky som videl možnosť optimalizovať PDF. Výsledok bol, že jej dokument zmenšil veľkosť z 3 MB na 57 kB bez akéhokoľvek viditeľného poklesu kvality.

Zistiť, ako to urobiť pomocou príkazového riadku na Linuxe, bolo jednoduché. Prvý výsledok na StackOverflow z vyhľadávania ukázal nasledujúce použitie GhostScriptu:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
   -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

Fungovalo to bezchybne. Potreboval som to spustiť na viacerých súboroch v priečinku, inými slovami, spustiť to dávkovo. Rozhodol som sa použiť xargs.

Poznámka: Používanie xargs -I ako je vysvetlené nižšie môže byť potenciálne nebezpečné. Prečítajte si odkazy v jednom z mojich príspevkov, aby ste sa dozvedeli viac.

Príkaz gs upravený a prúdený do xargs vyzerá takto:

find --depth=0 -name *.pdf | xargs -I % gs --ARGUMENTS %

Alebo by mohol využiť utilitu fd s nulovým znakom namiesto nového riadku, cez -0 alebo jeho dlhú formu, atribút --print0. Takto to bolo historicky kombinované s xargs, čo je tiež uvedené v dokumentácii fd:

-0, --print0 Oddeliť výsledky vyhľadávania nulovým znakom (namiesto nových riadkov). Užitočné pri rúrovaní výsledkov do xargs.

Príkaz potom vyzerá takto:

fd -0 -d1 "\.pdf" | xargs -0 -I % gs --ARGUMENTS %

V mnohých prostrediach nemusí byť cesta s nulovým znakom vôbec potrebná, ale môže byť dobré vedieť o tomto vzťahu. -0 na oboch stranách rúry by teda mohlo byť vynechané:

fd -d1 "\.pdf" | xargs -I % gs --ARGUMENTS %

Opäť, kedykoľvek používate xargs -I, najprv urobte suchý beh (len samotný príkaz find bez rúrovania čohokoľvek), aby ste boli na bezpečnejšej strane a neprekvapilo vás nič nepríjemné — ako minimálna bezpečnostná opatrnosť. A prípadne si urobte vlastný prieskum.

Celý príkaz, s ktorým som nakoniec dávkovo spracoval a zoptimalizoval veľkosť PDF, bol tento:

fd -d1 "\.pdf" | xargs -I % \
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
   -dNOPAUSE -dQUIET -dBATCH -sOutputFile="/path/to/output/dir/%" %

Môže sa hodiť. Užívajte!