Conversione fattura elettronica in formato leggibile

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3072
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Conversione fattura elettronica in formato leggibile

Messaggioda joe » mer nov 13, 2019 16:28

Ciao a tutti,
come da oggetto mi chiedevo se qualcuno qui si fosse posto il problema di riuscire con qualche tool fatto in casa, possibilmente usando qualche comando da shell o creandosi uno script, a convertire le fatture elettroniche che arrivano in formato XML o P7M, in un formato umanamente leggibile tipo PDF.

Ho visto che ci sono anche programmi già pronti, e tra l'altro personalmente ho a che fare con una casella su aruba che mette a disposizione la funzionalità "visualizza fattura", però potrebbe ugualmente tornare utile avere un tool auto-prodotto o quasi, magari in caso di conversione in blocco di N fatture... E in ogni caso, sempre meglio essere in grado di convertire autonomamente questi files.

Ho buttato giù questo script:

Codice: Seleziona tutto

#!/bin/bash

XML_INPUT=$1
PDF_OUT=$XML_INPUT.pdf
HTML=$(tempfile).html
STYLE=FoglioStileAssoSoftware.xsl

xsltproc $STYLE $XML_INPUT > $HTML
wkhtmltopdf --minimum-font-size 18 $HTML $PDF_OUT
rm $HTML


In pratica quel poco che ho capito è che la fattura elettronica nel formato XML è illeggibile. Banale...
Per leggerla occorre un foglio di stile da applicare all'XML-fattura di partenza in grado di formattarlo in modo leggibile.

Il tool xslproc sembra fare proprio questo. Gli si da in pasto un foglio di stile XSL e il file XML della fattura e lui produce un file HTML leggibile attraverso un normale browser.
Volendo in uscita un PDF stampabile occorre un passaggio ulteriore sfruttando un altro tool che converte il file HTML in PDF.
Per lo scopo ho trovato wkhtmltopdf, dal quale si può comodamente settare anche il font minimo in uscita (nel mio caso utilissimo per ingrandire il carattere del documento, altrimenti un po' striminzito).

Come foglio di stile ho usato quello messo a disposizione da assosoftware:

Codice: Seleziona tutto

# wget http://www.assosoftware.it/allegati/assoinvoice/FoglioStileAssoSoftware.zip
# unzip FoglioStileAssoSoftware.zip

che crea una tabella ben fatta chiaramente leggibile.
Meglio di quello che si trova sul sito:
https://www.fatturapa.gov.it/export/fat ... it/a-3.htm

Per testare la cosa ho usato questa fattura di esempio:
https://www.fatturapa.gov.it/export/fat ... _FPR02.xml

Insomma il tutto sembra proprio funzionare.

Devo ancora fare una ricerca per gestire il formato firmato P7M, ma credo che si trovi qualche altro tool da coinvolgere nello script per lo scopo.

Invece ho notato un dettaglio che non mi garba: il PDF finale non presenta la tabella che si crea perfettamente centrata orizzontalmente.
Domanda per voi: come si potrebbe ottenere questa centratura?
Occorre modificare il foglio di stile di partenza?
Oppure si può modificare in fase di applicazione del foglio di stile xslproc (chiedo questo perchè anche l'HTML intermedio mi pare venga fuori non centrato)
Oppure ancora si può modificare in fase di conversione da HTML a PDF, con qualche opzione di wkhtmltopdf?

Grazie in anticipo!
Spero che lo spunto sia di utilità anche per altri che si sono posti la domanda... :)

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3072
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Conversione fattura elettronica in formato leggibile

Messaggioda joe » mer nov 13, 2019 20:26

Niente per il momento non ho risolto:
- ne la centratura del PDF finale, che probabilmente dipende dall'ultimo passaggio cioè da wkhtmltopdf
- ne il test con fatture firmate in fomamto xml.p7m, perché banalmente non ho sottomano files del genere e non ho neanche trovato in giro un facsimile tanto per testare.
Ad ogni modo ho trovato guide in cui si indica il comando:

Codice: Seleziona tutto

openssl smime -decrypt -verify -inform DER -in $file_input_name -noverify -out  $file_output_name


Se avete idea di dove sia possibile trovare un file P7M con una fattura facsimile firmata digitalmente, fate sapere così provo a vedere se funziona o se va corretto.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6538
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Conversione fattura elettronica in formato leggibile

Messaggioda targzeta » mer nov 13, 2019 22:59

Ciao. Come prima versione mi sembra un ottimo risultato, no? Ho rifatto tutti i passaggi e alla fine il PDF è gradevole. Non c'entrato, ma chi se ne frega? Probabilmente sì, va modificato il foglio di stile iniziale.

Per il comando invece sì. Ti confermo che è corretto, rimuove la firma dal file e ti ritorna l'xml originale.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3072
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Conversione fattura elettronica in formato leggibile

Messaggioda joe » mer nov 13, 2019 23:13

A proposito del comando per estrarre l'XML dal P7M, non è che sai mica indicarmi dove scaricare un "P7M facsimile" su cui testarlo?

Ho cercato in rete ma di files del genere per provare non ne ho trovato, solo mille guide a programmi per l'estrazione ma neanche un file di partenza per testare...

Grazie della conferma intanto!

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3072
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Conversione fattura elettronica in formato leggibile

Messaggioda joe » gio nov 14, 2019 13:38

Ok alla fine sono riuscito a trovare dei P7M per fare almeno la prova di estrazione.
Qua ve ne sono alcuni in allegato ad alcune ordinanze o delibere di un amministrazione comunale (se ne trovano tra i più vecchi pubblicati, tipo 2013...):
http://albo.studiok.it/daverio/albostorico/
Esempio:
http://albo.studiok.it/daverio/albo/all ... 5wZGYucDdt

Ok, in realtà quello è un PDF firmato digitalmente da quell'amministrazione comunale, non un XML di una fattura elettronica. Per cui si può fare una prova di estrazione, ma non un test su tutta la procedura - estrazione xml + conversione in pdf leggibile. Lì salta fuori subito il PDF leggibile.
Ad ogni modo si può testare il buon funzionamento del comando di estrazione, che come confermava targzeta, funziona senza problemi.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3072
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Conversione fattura elettronica in formato leggibile

Messaggioda joe » gio nov 14, 2019 14:19

Ok, ho smanettato un attimo con wkhtmltopdf... E ho notato che semplicemente aggiungendo i margini di 2 cm sia a sinistra che a destra, alla fine la tabellina della fattura viene centrata nel foglio:

Codice: Seleziona tutto

#!/bin/bash

XML_INPUT=$1
PDF_OUT=$(basename -s .xml $XML_INPUT).pdf
HTML=$(tempfile).html
STYLE=FoglioStileAssoSoftware.xsl

xsltproc $STYLE $XML_INPUT > $HTML
wkhtmltopdf --minimum-font-size 16 -T 2cm -B 2cm -L 2cm -R 2cm $HTML $PDF_OUT
rm $HTML


Ok, direi che grosso modo ci siamo. La cosa importante è che sia leggibile e possibilmente che stia in una pagina sola, ma poi quello dipende anche dalla fattura in questione.

A questo punto sarebbe bello poter fare a meno di dover mantenere nella directory di esecuzione anche il foglio di stile XSL.
Certo si potrebbe andare a pescare in una directory predisposta, ad hoc tipo:

/usr/doc/convertifattura-0.0.1/FoglioStileAssoSoftware.xsl

Ma per semplicità visto che abbiamo solo un file esterno necessario allo script, sarebbe carino includere il foglio di stile nello script stesso.
Anzi sarebbe ancora più carino prendere foglio di stile e script sh, e compilare tutto in modo da ottenere un file binario da piazzare comodamente nella propria dir degli scripts tipo ~/.myscripts.
La questione esula dalla domanda di partenza... ad ogni modo la butto lì. :)

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3072
Iscritto il: ven apr 27, 2007 11:21
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE-4.14.21

Re: Conversione fattura elettronica in formato leggibile

Messaggioda joe » ven nov 15, 2019 17:33

Rieccomi...
Alla fine ho integrato nello script il foglio di stile, quindi "hardcoded" o embed o "incluso nel codice dello script".
La cosa importante da tenere in considerazione è l'utilizzo della forma seguente:

Codice: Seleziona tutto

xsltproc - $XML_INPUT <<'EOF' > $HTML
... testo foglio di stile xsl ...
... testo foglio di stile xsl ...
... testo foglio di stile xsl ...
... testo foglio di stile xsl ...
... testo foglio di stile xsl ...
EOF


Il trattino come primo argomento di xsltproc gli indica di ottenere il primo argomento, cioè il file XSL, da STDIN. Il secondo argomento è invece ottenuto via variabile $XML_INPUT (è il file xml contente la fattura, che dalla parte dello script non riportata lì sopra viene passato da riga di comando).
Lo STDIN viene popolato dall'here-document nella forma <<'EOF'. È indispensabile, altrimenti la shell interpreta parte del contenuto del foglio di stile e al tool xsltproc gli arriva un foglio di stile corrotto... E dà errore...

Ho creato 2 versioni dello script una usando il foglio di stile di assosoftware:
http://www.assosoftware.it/allegati/ass ... ftware.zip

L'altra usando quello dello "studio maggioli":
http://fatturapa.saga.it/maggioli_fatturapa_v1.2.xsl

Entrambi creano un impaginato un po' più decente rispetto al foglio messo a disposizione sul sito "gov.it".
Metto i due script in allegato... Chissà mai che servano a qualcuno anche solo come spunto.

Se provate fatemi sapere come funzionano...

Domanda per voi, volendo ottenere una cosa del genere che giri in ambiente windows cosa consigliereste?

PS.
Riguardo alla questione "built in" che avevo accennato nel precedente messaggio.
L'idea era quella di fare una directory in cui mettevo lo script, il foglio di stile separato e richiamato dentro lo script stesso, come fosse una sorta di libreria.
Poi un po' come con la compilazione e il building dei programmi avevo immaginato la possibilità di "compilare" il contenuto di quella directory in modo da creare un "binario" finale che avesse linkato staticamente il foglio di stile, in modo da avere solo un file eseguibile da piazzare in un una dir appartenente al PATH.
Ho trovato altra roba tipo "shc" che converte in C lo script bash per poi compilarlo ed ottenere un binario. Però non ha alcuna utilità, perché comunque quando viene eseguito in pratica viene ritradotto in linguaggio shell, quindi per farlo funzionare serve sempre la bash, che va be' quella c'è in ambito linux, ma soprattutto serve presente anche il foglio di stile, e allora siamo punto e a capo.
Non so se si era capito il senso della domanda, spero che ora sia più chiaro.
Allegati
converti-fattura2.sh
(177.61 KiB) Scaricato 14 volte
converti-fattura.sh
(107.01 KiB) Scaricato 11 volte