Modificare i file PDF in tutti i modi possibili

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 output.pdf tmp.ps
ps2pdf tmp.ps compresso.pdf
rm tmp.ps

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.

[incompleto] 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.

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. I problemi principali sono legati ad alcuni font. Per ora perciò non posso scrivere questa sezione, ma spero di poterla aggiornare presto!

About these ads

40 pensieri su “Modificare i file PDF in tutti i modi possibili

  1. Ottima cosa questo articolo, grazie Lazza.
    Alcuni software non li avevo mai sentiti.
    Anche se, questi software (application) sono per uso non professionale, ciò che manca è qualche standardizzazione o almeno uno sforzo per riunirli.

  2. @ Mike, mi sembra che faccia le stesse cose (un po’ meno) di PDF-Shuffler, per cui non lo inserirò nel post. Meglio tenere solo una o due opzioni per ogni cosa, sennò diventa enorme. :) In ogni caso grazie per la segnalazione.
    @ Hammond_Smoking, peccato che non ci sia nei repository, semplificherebbe le cose. Lo metto alla voce del ritaglio. ;) Io per dividere le pagine in due di solito faccio due copie del PDF, le ritaglio sulle due metà e le alterno con l’interleave (sì, è macchinoso!).

  3. “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.”
    Ancor più semplicemente si può usare Chrome per visualizzarlo e compilarlo.

    Invece che tu sappia esiste un programma opensource per creare un file pdf con i campi compilabili tipo quello che hai usato per esempio?

  4. Sei tu che nella premessa hai parlato del “nostro amato linux” e chrome esiste anche per linux! ;-) … so che tifi per la volpe…

    Grazie per la dritta su scribus, voglio proprio vedere come funziona potrebbe essermi molto d’aiuto al lavoro!

  5. Ottimo, Andrea, molto utile: hai parlato anche di strumenti che non conoscevo!
    Aspetto che finisci con la sezione su PDF/A perché mi interessa parecchio.

    Grazie per la citazione! :)

  6. @ Franz, mi confermi che funziona bene? L’ultima volta che l’avevo provato faceva poco e si piantava spesso.
    @ aldolat, grazie a te!

  7. Una cosa che ho scoperto stasera è che pdf-shuffler se sta cercando di cancellare una pagina di un pdf protetto non dice niente e non fa il suo lavoro.. voglio dire sembra che tutto sia andato in porto ma alla fine il file con le pagine tagliate non viene salvato…
    Mi sono accorto che il file era protetto perchè provando la procedura “pdftk input.pdf cat 3 10-20 25 28 32 45-end output output.pdf” da terminale mi ha detto che il file era protetto..
    Era solo per avvisare se a qualcuno non funziona, magari non perde un’ora come me per capire perchè…

  8. Ho visto il file che mi hai inviato, in formato PDF 1.5… ho inserito un appunto nell’articolo con qualche soluzione alternativa. :)

  9. Ciao Lazza,
    hai percaso consigli su come poter fare statistiche sui PDF in Linux, nel senso conteggio parole, spazi, ecc..?
    Non trovo un app decente. Se hai consigli ti ringrazio :)

  10. Onestamente no, però mi viene in mente una soluzione alternativa: converti il file in .txt e poi usi i comandi tipo wc o simili per analizzare il testo. ;)

  11. Ciao a tutti, ho un grosso problema a lavoro,
    in quanto devo riuscire a creare ua procedura automatica che eseguendo un comando da riga di comando (o altra procedura automatica da visual basic) riesca a scrivere su un file pdf già esistente e a restituire un file pdf aggiornato con le scritte inserite.
    ho provato in mille pdftk e anche a generare un file fdf, ma non ottengo mai un file pdf in automatico come lo vorrei.
    Qualcuno può aiutarmi è urgentissimo….grazie mille

  12. Visual basic? Veramente quello gira solo su Windows… Ad ogni modo, per le tue esigenze io farei un file SVG (che di fatto è XML) con Inkscape. Poi ci cambi le scritte con quelle che vuoi tu e lo converti in PDF con svg2pdf. Fatto questo, devi solo “sovraimporre” le due pagine. Lo puoi fare con PdfTk oppure con iText.
    Sì, effettivamente la sovrapposizione non l’avevo trattata, me la segno per quando aggiornerò il post. :)

  13. Salve!
    Io recentemente mi sono imbattuto sul problema di convertire un PDF in PDF/A per poterlo inviare alla Camera di Commercio. (Le CCIAA oramai accettano solo il pdf/a).
    Siccome sono su linux a casa ho cercato di risolvere questo problema su linux. Ciò che ho trovato funzionare è il seguente comando:

    gs -dPDFA -dBATCH -dNOPAUSE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=pdfa_filename.pdf input1.pdf

    Spero sia di aiuto a qualcuno.

    (usato e testato!)

  14. Hai ragione. :-) Ho testato di nuovo, giusto alcuni giorni fa, lo script che avevo elaborato (che sostanzialmente usa il tuo comando più un paio di altre cose) e posso confermare che funziona. Il problema che avevo avuto ad agosto, quando ho scritto il post, era che la versione di Ghostscript comunemente installata era piena di bug, perciò in alcuni casi funzionava ed in altri no.
    In particolare mi dava problemi proprio da PDF a PDF/A, ed è per quello che passavo per PostScript. Proverò anche la tua versione e poi aggiornerò il post nel giro di qualche giorno. ;-)

  15. Ho notato che nei files PDF dopo ogni riga è come se ci fosse un nuovo paragrafo, e questo, se si vuole convertire in altri formati (nel mio caso epub) è davvero odioso (immaginatevi un libro dove ogni riga e mezzo va a capo a metà frase e lascia uno spazio: dopo una pagina si rischia di collassare!). C’è un modo per eliminare questa caratteristica?Sia con programmi su citati che con Adobe, Grazie mille in anticipo!

  16. I PDF non hanno “ritorni a capo”, semmai contengono elementi testuali e immagini che possono essere disposti in qualsiasi modo possibile. Se ho capito bene tu stai parlando di ciò che si ottiene quando fai “copia-incolla” del testo. Se è così, penso tu possa fare un “cerca e sostituisci” con l’editor di testo per rimuovere i ritorni a capo… questo però non riguarda il PDF di per se. Cosa adoperi per la conversione? Hai provato con Calibre?

  17. Io avevo provato con un programma di conversione online, comunque intendevo proprio quello: quando in un altro formato ogni riga viene considerata a se! Poi non sono molto esperto in materia…
    Ma cerca e sostituisci non è un po’ ostico per un libro intero? Cosa consigli di fare?

  18. Salve a tutti io ho un problema che puo’ sembrarvi banale ma non riesco a risolvere… Durante la conversione dei file in PDF il carattere si riduce e non riesco a fare convertire il documento mantenendolo il carattere originario.
    Grazie per l’aiuto

  19. ragazzi un aiutino:( ho un file in pdf e dovrei modificare le immagini presenti all’interno in ordine numerico crescente… esiste un modo??? help me:(

  20. Ottima guida. Io però ho un problema. Ho installato nell’ordine in cui scrivo
    - ghostscript pdftk e imagemagik. Tramite prompt mi reco nella cartella del file ma il comando pdftops non funge. Premetto che uso Windows xp. Se uso convert per convertire il file prima in .ps e poi di nuovo in .pdf ottengo la stessa compresssione?
    Grazie

  21. Convert ti trasformerebbe il PDF in una immagine, non penso sia quello che tu desideri. Non ho idea di come funzioni la faccenda su Windows, ma hai provato a mettere il path completo dell’eseguibile?

  22. Ciao, sono molto inesperto in materia e le tue dritte mi sono state molto utili, tuttavia ho salvato un file pdf con numerazione delle pagine annessa, mi servirebbe sapere come faccio per eliminare la numerazione dalle pagine e inserirne una nuova perchè poichè ho unito più file pdf in uno ad ogni file la numerazione ricomincia da 1 invece vorrei che continuasse senza ricominciare. Come posso fare?

    Grazie mille per il tuo aiuto!

  23. Potresti cercare di coprire i numeri vecchi e farne di nuovi, ma la vedo molto difficile. Molto meglio invece se puoi rigenerare i documenti che poi unisci già con i numeri di pagina giusti. :-)

  24. Per quanto riguarda i metatadi, pdftk ha fallito nell’estrarre i dati di un PDF protetto dalla modifica (non so se riguardo la protezione o le dimensioni di 8MB). Ho trovato che invece exiftool funziona alla grande. Non ho ben capito se i metadati nel PDF sono in formato exif o è il programmino che è flessibile.

Che cosa ne pensi?

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...