PDFA in linux

Da MontelLUG.

Premessa: cosa sono i PDF/A e perché mi interessano

Il PDF/A è un formato di PDF codificato in uno standard internazionale (ISO 19005-1), sottoinsieme dello standard PDF, appositamente pensato per l’archiviazione nel lungo periodo di documenti elettronici. Garantisce che il documento sia visualizzabile sempre allo stesso modo, anche a distanza di tempo e con programmi software diversi. Lo standard ISO PDF/A definisce due livelli di conformità: PDF/A-1a= massimo richiesto dallo standard e PDF/A-1b= minimo richiesto dallo standard.

Perché mi interessa gestire proprio i PDF/A: perché sono un professionista che a) per i propri clienti deve depositare documenti al Registro delle Imprese e b) devo depositare documenti nei nuovi fascicoli elettronici dei Tribunali d'Italia che dal mese di giugno 2014 hanno adottato il c.d. Processo Civile Telematico.

Nel primo caso il PDF/A è richiesto dal DPCM del 10.12.2008 “Specifiche tecniche del formato elettronico elaborabile (XBRL) per la presentazione dei bilanci di esercizio e consolidati e di altri atti al Registro delle Imprese”, pubblicato in G.U. n. 304 del 31.12.2008, che prevede l’obbligo, oramai dal 15 gennaio 2009, di allegare alle istanze dirette al Registro delle Imprese un documento informatico in formato PDF/A con il contenuto dell’atto.

Nel secondo caso non so esattamente indicare il riferimento di legge che richieste lo standard PDF/A ma fatto sta che così è (aggiungo anche che non tutti lo sanno ma gli stessi documenti possono esser depositati anche nel formato TIFF).

In entrambi i casi lo standard richiesto è il PDF/A-1a

Soluzioni proposte

Di seguito riporto alcune soluzioni che ho trovato utili e che voglio condividere. Tengo a precisare che ho testato i file generati con gli strumenti on-line di Telemaco ed i file sono conformi allo standard richiesto.

Uso di pdfForts

A chi usa KDE suggerisco caldamente l'installazione di questo set di script per Dolphin; tempo fa ho contattato l'autore del progetto (link1, link2) e ho fornito i parametri per aggiungere anche uno script per generare i PDF/A.

Per l'installazione suggerisco di usare il programma git, per poter periodicamente aggiornare gli script; è comunque possibile scaricare il programma ed installare il tutto in locale, come indicato nella guida che trovate nella pagina del progetto.

Se usate git, questi sono i passaggi:

$ cd /opt
$ sudo git clone https://github.com/sjau/pdfForts
$ sudo sh ./install.sh symlink all

Una volta installato avrete questo menù integrato in Dolphin (visualizzabile con tasto destro sopra un file pdf, azioni), che vi consentirà di fare tante cose utili con i pdf (come unire documenti, estrarre pagine, aggiungere un watermark, aggiungere/togliere una password, ecc...).

Uso della shell

E' la soluzione più immediata da applicare, ma sfido chiunque a ricordarsi a menadito i parametri del comando: in ogni caso questo è il comando da utilizzare:

$ gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -dUseCIEColor /
-sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite /
-sOutputFile=OUTPUTFILE.pdf INPUTFILE.ps

Installare una stampante PDF/A condivisa per tutto lo studio

Questa è una soluzione che ritengo molto interessante per ridurre i tempi di impostazione delle postazioni di lavoro dell'ufficio, indipendente dal sistema operativo delle postazioni di lavoro e che non comporta complessità mentale a chi usa le postazioni di lavoro. La soluzione è usare CUPS ed in particolare una stampante cups-pdf condivisa via Samba e che salva i file generati in una cartella condivisa a tutti. Tralascio l'installazione di cups, l'impostazione di Samba, la condivisione della stampante e l'impostazione della cartella condivisa; vi riporto invece le impstazioni da dare a CUPS.

Innanzitutto installare la stampante PDF:

$ sudo yum install cups-pdf 

oppure

$ sudo apt-get install cups-pdf

In secondo luogo aggiungere la stampante alle stampanti di cups: aprire l'interfaccia che usate per gestire le stampanti o via browser http://127.0.0.1:631 o http://localhost:631

Scegliere “aggiungi stampante”, nei dispositivi troverete CUPS-PDF, il driver sarà nel sottogruppo “Generic printer”/cups-pdf printer.

Ora la stampante pdf è pronta e funzionante, provate a stampare un file.

Bisogna poi impostare CUPS-PDF affinchè generi un PDF conforme allo standard desiderato.

Dalla shell

$ cd /etc/cups
$ sudo nano cups-pdf.conf

Cercare e cancellare questa riga:

GSCall %s -q -dCompatibilityLevel=%s -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile="%s" -dAutoRotatePages=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite -f %s

e scrivere al suo posto questa:

GSCall %s -q -dPDFA -dCompatibilityLevel=%s -dNOPAUSE -dBATCH -dSAFER -dNOOUTERSAVE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sOutputFile="%s" -dAutoRotatePages=/PageByPage -c .setpdfwrite -f %s

Riavviare il computer o più semplicemente CUPS con il comando che segue:

$ sudo systemctl restart cups.service

ovvero questo per sistemi Debian, Ubuntu e derivate

$ sudo service cups restart

Ecco fatto: ora la stampante CUPS-PDF vi genera solo file PDF conformi e pronti alla firma e deposito.

Uso di uno script per shell/KDE

Questa è una soluzione semplice per avere sempre a portata di mano (ALT-F2) il “convertitore”.

È basato su specifiche per KDE; dovrebbe funzionare anche per file con nome contente spazi.

$ cd
$ nano .bashrc 

andare in fondo al file e aggiungere

alias pdfa='IFILE=`kdialog --title "SCEGLI IL FILE DA CONVERTIRE" --getopenfilename ~/ '*.pdf'`;OFILE=`kdialog --title "SCEGLI IL FILE DI DESTINAZIONE" --getsavefilename ~/ '*.pdf'`;gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sOutputFile="$OFILE" "$IFILE"'

uscire con CTRL+X e salvare.

Ora da shell (o con ALT+F2) sarà possibile lanciare il comando

$ pdfa

e si apriranno le finestre di dialogo che vi chiederanno quali file vi interessa convertire ed il nome del file di destinazione.

Creare un pulsante per KDE che lancia il comando su indicato

Sotto soluzione solo PER KDE dello script con impostazione dell'alias è creare direttamente un pulsante (sul Desktop o nel menù delle applicazioni) che lancia il comando.

Sul desktop o in una cartella qualsiasi: clicca col tasto destro, aggiungi collegamento ad applicazione. Si apre una maschera: scegliete il nome da dare all'icona, una descrizione un commento, l'icona che più vi piace e nel campo comando inserite questa stringa:

IFILE=`kdialog --title "SCEGLI IL FILE DA CONVERTIRE" --getopenfilename ~/ '*.pdf'`;OFILE=`kdialog --title "SCEGLI IL FILE DI DESTINAZIONE" --getsavefilename ~/ '*.pdf'`;gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sOutputFile="$OFILE" "$IFILE"

D'ora in poi cliccandoci sopra vi si apriranno le schermate di dialogo per la scelta dei file.

Stessa cosa si può fare nel menù delle applicazioni: tasto destro sull'icona del menù applicazioni (quella di KDE), modifica applicazioni; posizionarsi ad esempio nel menù ufficio e cliccare aggiungi. I passaggi poi sono gli stessi indicati subito sopra (nome, descrizione, icona, comando).


Uso di uno script per shell/GNOME

Richiede la presenza di zenity; funziona anche per file con nome contente spazi.

$ cd
$ nano .bashrc 

andare in fondo al file e aggiungere

alias pdfa='inFile=$(zenity --file-selection --file-filter=*.pdf --title="Scegli il documento PDF da modificare"); gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sOutputFile="${inFile%.pdf}_PDF-A.pdf" "$inFile"'

uscire con CTRL+X e salvare.

Ora dal terminale sarà possibile lanciare il comando

$ pdfa

e si aprirà la finestra di dialogo che vi chiederà quale file vi interessa convertire; il file risultante sarà salvato nella stessa cartella come nomefile_PDF-A.pdf