Il formato PDF è ottimo per gestire i documenti, però è un po’ ostico per quanto riguarda le modifiche. Nonostante questo, ci sono molte operazioni possibili per ritoccare i documenti PDF e adattarli alle proprie esigenze. Cercherò in questo articolo di raccogliere (forse ambiziosamente) tutte le operazioni che il nostro amato Linux ci consente (descritte in almeno un modo tra quelli disponibili).
Quindi è probabile che in futuro il post venga ulteriormente aggiornato, probabilmente grazie ai vostri commenti e suggerimenti! Non parlerò dei molti modi per creare file PDF, visto che sono cose che moltissimi sanno già e comunque esula dallo scopo dell’articolo. Vi anticipo già che sul blog di Aldo, sempre piacevole da leggere, trovate un articolo simile. Abbiamo avuto la stessa idea senza saperlo e la cosa ci ha divertito.
I programmi utilizzati
Per non rendere l’articolo più complicato da leggere vi elenco qui tutti gli strumenti usati. Chiaramente tutto dipende da quale operazione volete fare (quindi non è detto che vi serviranno tutti). Rispetto ad Aldo io mischio un po’ gli strumenti ad interfaccia grafica con quelli a linea di comando, spero che non sia un problema.
Vi posso dire per certo che trovate tutti questi componenti nel gestore pacchetti di Ubuntu, ma sono convinto che qualsiasi distribuzione tra quelle più famose li comprenda nei propri repository.
Modifiche relative all’ordine delle pagine
Dividere un PDF in più parti
Pdfsam fornisce diverse opzioni attraverso l’interfaccia grafica alla sezione Split, tra le quali:
- burst (divisione in pagine singole)
- divisione dopo n pagine
- divisione ogni n pagine
- divisione delle pagine pari o dispari
Unire vari PDF
In questo caso pdfsam permette un semplice accodamento di più documenti, cosa che si può ottenere anche con pdftk usando questo comando:
pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf
Eliminare/tenere solo alcune pagine
Usando PDF-Shuffler è possibile selezionare col mouse una o più pagine (aiutandosi con i tasti Shift o Ctrl) e poi premere Canc per eliminarle. Se invece un documento contiene molte pagine e se ne vogliono preservare solamente alcune è più semplice farlo da terminale. Cito l’ottimo esempio dal post di Aldo:
Col seguente comando estraiamo le pagine 3, dalla 10 alla 20, 25, 28, 32, dalla 45 alla fine.
pdftk input.pdf cat 3 10-20 25 28 32 45-end output output.pdf
Modificare arbitrariamente l’ordine delle pagine
Tramite PDF-Shuffler si possono accodare più PDF (oppure lavorare su uno solo) e poi spostare le pagine semplicemente tramite drag’n’drop.
Alternare le pagine tra due PDF distinti (interleave)
Questo si rivela utile nel caso in cui sia necessario modificare separatamente le pagine pari da quelle dispari (per esempio per ritagliare con margini diversi) oppure quando abbiamo un documento PDF con 2 pagine per foglio che vogliamo spezzare in modo da avere pagine singole. Le istruzioni per il ritaglio le vedremo dopo, intanto supponiamo di avere due documenti, dispari.pdf e pari.pdf, da voler alternare. Il trucco l’ho trovato sul blog Binary Static, e consiste nel fare il burst dei due PDF usando nomi opportuni per le pagine, in modo che poi vengano ordinate correttamente.
pdftk dispari.pdf burst output %04d_A.pdf
pdftk pari.pdf burst output %04d_B.pdf
Si provvede dunque all’unione di tutte le pagine (è importante che non ci siano altri file PDF estranei nella stessa directory):
pdftk *.pdf cat output out.pdf
Preparare la stampa a libretto (booklet)
Per realizzare autonomamente un libretto da stampare su fogli che poi andranno piegati e rilegati insieme, è necessario ridisporre le pagine in modo che l’ordine sia corretto una volta che viene fatta la rilegatura. Si può fare facilmente passando per il formato PS (PostScript). I comandi sono i seguenti:
pdftops documento.pdf output.ps
psbook output.ps tmp.ps
psnup -pA4 -2 tmp.ps booklet.ps
rm output.ps tmp.ps
ps2pdf booklet.ps
rm booklet.ps
In pratica si converte il documento in PostScript e si ordinano le pagine a libretto. Si usa psnup (vedi più sotto) per metterlo su due pagine in formato A4 (ovviamente si può cambiare) e poi si riconverte il file ottenuto in PDF. Qua e là si fa un po’ di pulizia. Sulle differenze tra pdf2ps e pdftops consiglio di leggere questo articolo. Ricordatevi infine, quando stampate, di fare correttamente il fronte-retro!
Modifiche sull’aspetto delle pagine
Ruotare le pagine
Il modo più comodo di ruotare di 90° o 180° a piacimento alcune (o tutte le) pagine di un PDF, è quello di usare PDF-Shuffler. Una volta selezionate le pagine desiderate (aiutatevi sempre con i tasti Ctrl o Shift), cliccate col destro per scegliere dal menu come ruotarle. Una volta finito esportate il file. Si possono ruotare le pagine anche tramite il terminale usando pdftk: consultate l’articolo di Aldo per questo aspetto.
Ritagliare i margini
Se volete ritagliare approssimativamente i bordi delle pagine, il metodo più facile è usare ancora PDF-Shuffler. Il menu contestuale ha una voce per il ritaglio, la nuova finestra che si apre vi chiede un valore in percentuale per ogni lato. Ricordate che questo valore è sempre relativo alla pagina di partenza, anche se lo cambiate successivamente.
Se invece avete un documento con bordi precisi dove ritagliare, dovrete ricorrere a un sistema un po’ più macchinoso. Per questo avrete bisogno innanzitutto di convertire la pagine da ritagliare in una immagine dalla quale misurare dei pixel. Ne approfitto quindi per dirvi come convertire un PDF in immagini. Usate ImageMagick in questo modo:
convert -density 288 documento.pdf -resize 25% documento.jpg
Il trucco di usare una risoluzione di 288 e poi riscalare del 25% si chiama supersampling e consente di avere un’immagine precisa e con l’antialiasing. Dovete quindi aprire l’immagine con Gimp o un altro editor di immagini e misurare i pixel che volete tagliare da ogni lato. Una volta fatto questo, salvate questo codice in Python dentro a un file chiamato pdf_crop.py e dategli i permessi di esecuzione. Usatelo nel seguente modo:
pdf_crop.py -p 1.0 -m "10 20 30 40" -i documento.pdf
Cambiate i valori in pixel: in questo esempio lo script taglia il documento di 10 pixel a sinistra, 20 in alto, 30 a destra e 40 in basso.
Nei commenti è stato suggerito anche Briss, che consente di ritagliare una o più zone, in modo da poter anche dividere una pagina in più parti. Purtroppo non è disponibile nei repository però vale la pena provarlo.
Ridimensionare le pagine
Anche in questo caso si può lavorare con il documento convertito in PostScript. Si usa quindi psresize per cambiare il formato di carta e ridimensionare per il meglio il documento. Tenete presente che dovete conoscere la dimensione in centimetri prima e dopo il ridimensionamento, e calcolare che livello di percentuale è richiesto. Per esempio, per ridimensionare un A4 in A5, dovete scalare circa del 70% (cioè 0.7) e passare da una dimensione di 21×29.7 cm a una di 14.85×21 cm.
pdftops documento.pdf output.ps
pstops "1:0@0.7" output.ps scalato.ps
psresize -w 21cm -h 29.7cm -W 14.85cm -H 21cm scalato.ps ridimensionato.ps
ps2pdf ridimensionato.ps
rm output.ps scalato.ps ridimensionato.ps
Mettere più pagine in una
Come accennavo prima, per disporre più pagine in una in un documento PostScript, si può usare il comando psnup. Ad esempio, per mettere 4 pagine in una su un foglio A4, potete fare così:
pdftops documento.pdf output.ps
psnup -PA4 -4 output.ps multipagina.ps
ps2pdf multipagina.ps
rm multipagina.ps output.ps
Operazioni relative all’intero documento
Riparare un PDF danneggiato
In alcuni casi un file PDF con piccoli difetti può essere letto male dai lettori, ma si può tentare di recuperarlo. Per farlo, dovete semplicemente “unire” quel file a nessun altro, con uno dei metodi che ho indicato inizialmente (pdftk oppure pdfsam).
Sbloccare le operazioni sui PDF
Alcuni file vengono creati con il blocco su alcune operazioni, come ad esempio la stampa oppure la copia del testo. Su Linux quasi sempre non è un problema, visto che questi blocchi sono ignorati da vari lettori, però se dovete passare un documento a una persona che usa Adobe Reader potrebbe tornare utile sbloccare il PDF.
Per farlo, aprite il file in PDF-Shuffler e poi esportatelo semplicemente. In alternativa si può usare il sito PDFUnlock! per documenti fino a 5MB. Tenete presente che questo metodo funziona solo per i PDF con permessi bloccati (stampa, copia, …) e non con i PDF protetti da password per la lettura, i quali non si possono sbloccare così facilmente.
Se il file è un PDF in versione 1.5 (invece della più diffusa 1.4) PDF-Shuffler può aver problemi a esportarlo. In questo caso, avete due ulteriori alternative un po’ meno ottimali al sito PDFUnlock!:
- convertire il file in PS e poi di nuovo in PDF come spiegato nel paragrafo successivo (relativo alla compressione)
- aprirlo con Evince e usare la funzione di stampa “su file” per creare un nuovo PDF (perderete l’orientamento delle pagine orizzontali)
Comprimere gli elementi grafici per ridurre il peso
Di questo avevo già parlato in un altro post, in sostanza si tratta di convertire in PS e poi di nuovo in PDF: quando il documento contiene immagini molto pesanti, queste vengono compresse automaticamente.
pdftops input.pdf tmp.ps
ps2pdf tmp.ps compresso.pdf
rm tmp.ps
Aggiornamento 29/03/2015: esiste un altro metodo che in genere dà risultati migliori e permette una regolazione più precisa. Potete usare Ghostscript per creare un nuovo file scegliendo il livello di qualità delle immagini, in questo modo:
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dCompatibilityLevel=1.4 -r75 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compresso.pdf input.pdf
Le varie qualità disponibili sono le seguenti, come indicate in questo sito:
-dPDFSETTINGS=/screen (screen-view-only quality, 72 dpi images)
-dPDFSETTINGS=/ebook (low quality, 150 dpi images)
-dPDFSETTINGS=/printer (high quality, 300 dpi images)
-dPDFSETTINGS=/prepress (high quality, color preserving, 300 dpi imgs)
-dPDFSETTINGS=/default (almost identical to /screen)
Per ulteriori opzioni, fate riferimento al sito linkato sopra.
Modificare i metadati
Per cambiare le informazioni interne, come l’autore del documento, è utile prima di tutto estrapolare quelle che ci sono già:
pdftk input.pdf dump_data output info.txt
Poi si può modificare il file di testo con le opportune informazioni, e riscriverle così:
pdftk input.pdf update_info info.txt output output.pdf
Ringrazio Aldo, perché ho estratto queste istruzioni dal suo post. Cito inoltre questo stralcio dove dice che parametri si possono inserire.
Un esempio di elenco di metadati:
InfoKey: Title
InfoValue: Titolo del PDF
InfoKey: Subject
InfoValue: Soggetto del PDF
InfoKey: Keywords
InfoValue: Parole, Chiave, Del, PDF
InfoKey: Author
InfoValue: Autore del PDF
Estrarre i font
Se volete estrarre un carattere incorporato da un documento, potete usare FontForge. Aprite il programma e vi si presenterà la schermata Open font. Su Filter impostate Extract from PDF e poi selezionate il vostro file. Tenete conto che molti font nei PDF contengono solo un sottoinsieme dei caratteri, e molto spesso i font sono protetti da copyright. In alcuni casi sarà FontForge a rifiutarsi di estrarre il font.
Una volta aperto il carattere ci sono diverse ottimizzazioni da fare, leggete questo articolo per i dettagli.
Estrarre le immagini
Questo è uno dei compiti più semplici. Il seguente comando creerà una serie di immagini in formato XPM il cui nome inizia per estratta-.
pdfimages documento.pdf estratta
Estrarre il testo
Per convertire un PDF in formato TXT basta fare:
pdftotxt documento.pdf
Se volete soltanto ricercare all’interno dei documenti PDF, forse è più conveniente installare e adoperare pdfgrep. Vedete anche il paragrafo successivo riguardante il testo contenuto nelle immagini.
Effettuare l’OCR dei PDF contenenti immagini
È possibile “sovraimporre” il testo sulle immagini di un PDF in modo da renderlo ricercabile. Ho scritto un post a riguardo in cui spiego le limitazioni delle soluzioni open source e propongo l’uso di un software tramite Wine.
Annotare e riempire i moduli
Esistono due tipi di moduli PDF. Alcuni documenti contengono dei veri e propri campi modificabili, in tal caso un lettore PDF come Evince li può tranquillamente compilare. Provate questo documento di esempio per vedere personalmente.
Se invece avete un PDF che ha semplicemente l’aspetto di un modulo e su cui volete scrivere, oppure un qualsiasi testo da annotare, potete semplicemente aprirlo con Xournal. Il programma vi fornisce un semplice strumento testo per inserire scritte dove volete e permette evidenziare o disegnare linee. Una volta finito, cliccate su File > Export to PDF per salvare un nuovo documento modificato.
Se volete fare modifiche con strumenti di disegno avanzati, potreste provare anche Inkscape. Dovete però ricordarvi che Inkscape gestisce una pagina alla volta, e se non avete installati i font presenti nel PDF le scritte potrebbero apparire diverse, sballando un po’ l’aspetto complessivo. In compenso con Inkscape avete la maggior libertà d’azione possibile, potendo spostare oggetti, eliminarli e aggiungerne di altri. Alla fine potete esportare di nuovo in PDF.
Convertire il PDF in formato PDF/A
Il formato PDF/A è la “versione ISO” del formato PDF. Serve per documenti che devono essere conservati per anni con la garanzia di poterli sempre aprire. Pertanto a volte serve convertire un PDF in PDF/A, specialmente PDF/A-1b.
Ho fatto molti esperimenti su questo punto, ma ci sono ancora diversi problemi da sistemare prima di trovare un metodo sicuro e abbastanza automatico per usare GhostScript convertendo in PDF/A, lo stesso dicasi per i PDF prodotti con LaTeX e il pacchetto pdfx
.
Consiglio pertanto l’uso di un convertitore online, come ad esempio quello di webPDF, utilizzabile cliccando qui.