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 -Iako 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, --print0Oddeliť 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!