martedì 5 febbraio 2013

pdftk: per il maneggio dei PDF

Oggi inauguro una nuova categoria di post: i “tips”, ossia suggerimenti, indicazioni, trucchi che utilizzo regolarmente nella mia attività, e che mi sembrano sufficientemente utili e sufficientemente sconosciuti da meritare di essere condivisi.

Parto da un’esigenza che non mi succede spesso, forse una volta al mese: devo costruire dei documenti PDF, magari mettendo insieme spezzoni proveniente da diverse fonti.

Un esempio pratico: a fine corso solitamente svolgo in aula esercizi d’esame. Affinché lo svolgimento sia più realistico, lo faccio “a mano”, scrivendo su fogli di carta (con la mia terribile grafia, ma su questo non posso farci molto…), anziché usare il PC come faccio per tutto il resto del corso. Al termine della lezione, posso scansire i fogli di carta e distribuire agli studenti il PDF. In questa fase sarebbe utile poter facilmente ruotare il file PDF scansito (di solito scrivo in modalità landscape (foglio orizzontale), ma lo scanner lavora in portrait (verticale)). Magari non tutto il file, ma solo alcune pagine, perché altre sono state scritte in modalità verticale. Inoltre, farebbe comodo aggiungere all’inizio il testo dell’esercizio, che ovviamente proviene da un altro file PDF. E magari interpolare in mezzo alcune pagine provenienti da file (frammenti di codice, disegni, appunti scritti a PC, …). In un caso lo scanner aveva erroneamente acquisito il documento in modalità doppia faccia, per cui ho dovuto estrarre le sole pagine dispari (corrispondenti alle facciate su cui avevo scritto).

Serve quindi uno strumento che, partendo da uno più file PDF in ingresso, permetta di selezionarne delle pagine, eventualmente ruotarle, ed assemblare un unico file complessivo, nel giusto ordine.

Ci sono diversi strumenti grafici reperibili in rete, ma quasi tutti sono limitati nelle funzionalità (le versioni complete sono di solito a pagamento).

Per questi compiti trovo insostituibile un piccolo programmino, eseguibile da linea di comando, che è totalmente gratuito e senza limitazioni di sorta, ed è disponibile per Windows, Mac e Linux. Sto parlando di pdftk (PDFtk Server - the PDF toolkit), utility scaricabile dal sito www.pdftk.com. Non c’è interfaccia grafica (motivo per cui è denominato ‘Server’), c’è solo un piccolo eseguibile di meno di 3MB che fa tutto!

pdftk-logo

La documentazione essenziale (sintetica, ma completa) si ottiene semplicemente attivando il programma con l’opzione –help:

pdftk –help

Diversi esempi d’uso sono altresì disponibili sul sito web. L’unica avvertenza è che il programma deve essere attivato esclusivamente dalla linea di comando (o Command Prompt, o DOS Prompt, o Terminale, come lo vogliate chiamare). Quindi un po’ di dimestichezza con le finestre di comando è indispensabile, e ringraziate che al primo anno di corso insistiamo sul farvele utilizzare…

Come dice la documentazione, con pdftk si possono fare diverse operazioni:

  • Merge PDF Documents
  • Split PDF Pages into a New Documen
  • Rotate PDF Documents or Pages
  • Decrypt Input as Necessary (Password Required)
  • Encrypt Output as Desired
  • Fill PDF Forms with X/FDF Data and/or Flatten Forms
  • Generate FDF Data Stencil from PDF Forms
  • Apply a Background Watermark or a Foreground Stamp
  • Report PDF Metrics such as Metadata and Bookmarks
  • Update PDF Metadata
  • Attach Files to PDF Pages or the PDF Document
  • Unpack PDF Attachments
  • Burst a PDF Document into Single Pages
  • Uncompress and Re-Compress Page Streams
  • Repair Corrupted PDF (Where Possible)
  • La sintassi di utilizzo non è del tutto intuitiva, ma una volta compreso il principio, si rivela decisamente potente.

    pdftk screenshot

    Alcuni esempi?

    Esempio 1: estrarre solo le pagine dispari da un file:

    Si usa il comando ‘cat’ (copia e concatena), specificando che interessa copiare dalla prima all’ultima pagina (1-end, opzionale), ma solo quelle dispari (odd).

    pdftk file1.pdf cat odd output estratto.pdf

    pdftk file1.pdf cat 1-endodd output estratto.pdf

    Esempio 2: ruotare di 90° un file:

    Altra variante del comando ‘cat’, dove questa volta specifichiamo la rotazione a destra (right) o sinistra (left).

    pdftk file1.pdf cat 1-endright output ruotato.pdf

    Esempio 3: unire due file, inserendo dopo la terza pagina del primo file l’intero secondo file, ruotato:

    In questo caso conviene dare dei nomi (A= e B=) ai file, in modo da poterli citare agevolmente in seguito. Poi il solito comando ‘cat’ specificherà le prime 3 pagine di A, poi tutto B (ruotato, a sinistra tanto per cambiare), poi dalla pagina 4 in poi di A

    pdftk A=file1.pdf B=file2.pdf  cat A1-3 Bleft A4-end output unione.pdf

    Altri esempi si trovano sul sito.

    A volte il vino buono si trova proprio nella botte piccola: piccoli programmini pieni di risorse e di flessibilità.

    L’unica cosa che non è in grado di fare, e che sarebbe utilissima, è di unire più pagine in una sola (come 4 pagine per foglio, o 6, utile per risparmiare carta). Ufficialmente, si parla di “PDF imposing” o “n-up collating”. Qualcuno conosce comode e semplici soluzioni (open source) che funzionino anche con file di grandi dimensioni (pensiamo alle 1000 slide di un corso, ad esempio….).

    2 commenti:

    1. Direi che http://linux.die.net/man/1/pdfjam potrebbe fare al caso tuo.

      RispondiElimina
      Risposte
      1. Sì, è una possibilità e funziona bene, ma è basato su LaTeX (in particolare pdflatex), che quindi deve essere installato.
        Mi piacerebbe trovare qualcosa di più leggero, con meno dipendenze esterne.

        Elimina