Comprimere i PDF con Ghostscript ed un’automazione di Keyboard Maestro
Questo articolo nasce decisamente per caso … stavo sfogliando la mia coda di feed RSS e sono incappato per caso in questo articolo di It's Foss.com.
Nell’articolo viene spiegato come comprimere un file PDF attraverso il comando da terminale Ghostscript.
Ghostscript è un potente comando da terminale che permette di manipolare in vario modo i PDF. Sono incappato per caso in questo programma e, pur apprezzandone la potenza (oltre al fatto che è open-source e gratuito), me ne sono interessato poco perché, onestamente, non è uno dei comandi più semplici da usare a terminale.
Mi è tuttavia venuto in mente che molti colleghi faticano a gestire i PDF (soprattutto se digitalizzati in modo non corretto) e la loro dimensione può essere uno dei problemi principali legati all’invio di email o, peggio, di depositi telematici.
In commercio esistono svariati software a pagamento che aiutano a comprimere i PDF (in primisAcrobat Pro DC), tuttavia Ghostscript (con gli opportuni accorgimenti – chi ha detto automazioni ?!? 😅) può diventare un ottimo strumento gratuito ed alla portata di tutti.
In questo articolo vi spiegherò come utilizzare Ghostscript sia da terminale, sia in modo automatizzato direttamente nel Finder di macOS utilizzando una macro di Keyboard Maestro.
Come installare Ghostscript in macOS
Se avete installato MacTeX, la versione per macOS di LaTeX, di fatto avete già installato anche Ghostscript.
Altrimenti è possibile farlo con Homebrew (qui vi ho spiegato come installarlo sul Mac) digitando il seguente comando:
brew install ghostscript
Ridurre le dimensioni dei PDF con Ghostscript
Occorre fare una dovuta premessa, come con qualsiasi software, anche Ghostscript non può fare miracoli. Secondariamente come dicono gli americani “Garbage in garbage out” traducibile in italiano come: se introduci spazzatura ottieni spazzatura, ovvero non pensiate che con questo metodo sia possibile migliorare PDF acquisti digitalmente male.
Se state cercando un modo di ottimizzare le scansioni ricevute in questo articolo ho spiegato alcuni trucchi ed applicazioni che uso per “ottimizzare” i documenti digitalizzati male che mi arrivano dai clienti.
Qui, invece, alcuni consigli per migliorare la digitalizzazione che facciamo noi stessi.
Presupponendo quindi di avere un PDF (acquisizione di un documento cartacea, simil fotocopia per intenderci) vediamo com’è strutturato il comando di Ghostscript per ottimizzarne i contenuti.
Il comando da digitare a terminale è il seguente:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compressed_PDF_file.pdf input_PDF_file.pdf
Non è il comando più intellegibile sulla faccia della terra!
Vediamo in estrema sintesi cose fa il comando gs
che sta per GhostScript. Anzitutto viene richiesto di lavorare con i PDF, poi viene dato il livello di compatibilità stesso. Successivamente, c'è la parte che ci interessa di più ovvero:
-dPDFSETTINGS=/prepress
Questo è il parametro che comprime il PDF originale. Di seguito vedete una tabella con le possibili opzione di -dPDFSETTINGS=
.
PDFSETTINGS | Descrizione |
---|---|
/prepress | (base) Maggior qualità dell’output (300 dpi) ma con dimensione maggiore |
/ebook | Qualità media dell’output (150 dpi) con una dimensione media del PDF elaborato |
/screen | Qualità inferiore dell’output (72 dpi) ma con le dimensioni minori del PDF elaborato |
Personalmente preferisco usare l'opzione “/ebook” che riduce la qualità dell'immagine contenuta nel PDF a 150 dpi ovvero una risoluzione simile a quello di un documento mandato attraverso un fax. In questo modo il PDF sarà ancora stampabile (per chi è affezionato alla carta) riducendone però le dimensioni. L'opzione “/screen” invece è quella che incide di più sulla qualità del PDF. Da una parte, se questo deve essere esaminato solo a schermo, i 72 dpi sono sufficienti per la sua lettura, ma se stampato i risultati non saranno soddisfacenti.
Da ultimo il comando indica dove salvare l'output (il risultato) della conversione:
-sOutputFile=compressed_PDF_file.pdf
dove “-sOutputFile=” è il parametro che specifica di voler salvare il documento in una specifica cartella e con uno specifico nome e “compressed_PDF_file.pdf” dovrà essere sostituito in base alle esigenze dal nome che vorrete dare al PDF compresso ed eventualmente le indicazioni della cartella dove salvarlo.
L'ultimo parametro, infine, è il PDF originale, l’input, che vogliamo comprimere, nel nostro caso “input_PDF_file.pdf”.
Oggettivamente mettersi a scrivere tutto questo testo nel terminale non è comodo.
Ho, quindi, fin da subito pensato ad una automazione che mi evitasse di “sporcarmi” le mani con la linea di comando.
Creare l’automazione in Keyboard Maestro
Spiegate le basi di funzionamento del comando a terminale di Ghostscrpt il passo successivo è quello di ottimizzare il tutto e non passare nemmeno dal terminale ma usare il comando direttamente nel Finder di macOS selezionando il documento PDF che si vuole ottimizzare ed ottenere il risultato finale premendo solo una combinazione specifica di tasti.
Per fare questo ho riciclato la macro che avevo creato per la generazione di un PDF da un file .MD con Pandoc e che trovate qui.
Vi rinvio all'articolo in questione dove ho spiegato il funzionamento in dettaglio della macro, qui mi dedicherò esclusivamente a qualche precisazione ed utile chiarimento nel caso voleste farci qualche modifica in autonomia.
La macro prende la selezione del file da voi fatta nel Finder e passa i dati al comando a terminale di Ghostscript, poi, avendo catturato il percorso in cui si trova il file originale, salva la versione compressa nella stessa cartella con lo stesso nome a cui però è postposto la dicitura low ovvero a bassa qualità.
Come anticipato ho impostato “-dPDFSETTINGS=/ebook” per ridurre la dimensione a 150 dpi ma voi potete tranquillamente usare l'opzione /screen a 72 dpi modificando l'azione “Execute Shell Script” (esegui script della Shell).
Materiale di riferimento ed approfondimenti
Con questo articolo ho deciso di inserire una nuova sezione ovvero quella dei materiali di riferimento.
Abitualmente mentre scrivo un articolo o faccio le mie ricerche per risolvere un problema consulto svariate materiale sul web, alcune cose le cito direttamente nell'articolo altre vanno disperse (o salvate all’interno del mio databese di DEVONthink). Questo è un peccato ed ho deciso, nel limite del possibile, di raccoglierli in questa sezione
- Articolo in inglese da cui ho preso ispirazione
- Idea dal forum di Keyboard Maestro che poi non ho usato e mi sono rifatto ad una precedente macro trovata sempre sul forum di Keyboard Maestro
- Interessante articolo in inglese dove vengono spiegati molti aspetti di Ghostscript e non solo: lettura consigliata
In conclusione
Era da qualche mese che non pubblicavo nulla e me ne dispiaccio ma il periodo è stato a dir poco “complesso”. Sto cercando di ripristinare una sorta di routine e cercare di ovviare a questo ed altri problemi che affliggono la mia vita. Se siete interessati a sapere cosa sta bollendo in pentola e dialogare con altri colleghi e non appassionati di tecnologia Apple, ma non solo, c'è il gruppo “segreto” di Avvocati e Mac su Telegram … Essendo segreto dovrete fare un po' di fatica ed andare ad ascoltare il mio podcast.
Venendo al tema di questo articolo spero che questo trucchetto possa tornare utile a qualcuno. Quello che mi interessa sottolineare qui è che, rubando codice un po' qui ed un po' là, è possibile senza troppa fatica automatizzare compiti abitualmente tediosi, tutto ciò senza sporcarsi troppo le mani col terminale.
Come sempre se avete domande o chiarimenti potete lasciare un commento qui sotto, vi leggo sempre volentieri anche se non sempre riesco a rispondervi.