Nei post precedenti abbiamo esplorato l’incorporazione di documenti all’interno di file PDF/A-3 utilizzando 4D Write Pro, compresa la generazione di fatture elettroniche. Poiché la fatturazione elettronica diventa obbligatoria in vari paesi europei, come Francia e Germania, la capacità di estrarre i file XML incorporati da questi PDF sta diventando fondamentale. Ma l’utilità di PDF/A-3 si estende oltre le fatture; questi file possono incorporare vari tipi di documenti che possono richiedere l’estrazione.
Mentre strumenti come Adobe Acrobat Reader offrono l’estrazione manuale, questo post introduce un metodo efficiente e automatizzato che utilizza 4D 20 R6 per gestire facilmente il processo.
HDI: estrazione di file PDF/A3
Un componente dedicato
È stato sviluppato un componente dedicato che consente di estrarre tutti i file allegati (in memoria) e di gestirli nel modo desiderato. Ad esempio, un file XML può essere analizzato direttamente in un albero DOM, mentre un file di immagini può essere salvato su disco, ecc.
GESTORE DI COMPONENTI
Questo componente può essere installato facilmente grazie al gestore di componenti, davvero semplice da usare e parte integrante di 4D 20 R6. È sufficiente creare un file dependencies.json all’interno della cartella Sources e digitare queste semplici righe. Il componente verrà installato non appena il progetto verrà avviato. L’HDI fornito si basa su questo meccanismo.
{
"dependencies":
{
"4D-QPDF":
{
"github": "4d/4D-QPDF",
"version":"*"
}
}
}
Estrazione
Un singolo metodo del componente consente di ottenere l’elenco e il contenuto dei documenti inclusi in un file PDF.
$colAttachments:=PDF Get attachments ($PDFfile)
Questo metodo restituisce una collezione contenente oggetti, ognuno dei quali descrive e contiene un allegato.
Essi conterranno attributi come name, extension, fullName, mimeType, content, ecc.
$path:="/DATA/TestPDFs/ManyEnclosures.pdf"
$PDFfile:=File($path; fk posix path)
Form.attachments:=PDF Get attachments($PDFfile)
Naturalmente, nel caso delle fatture elettroniche si può andare direttamente all’elemento xml incluso!
$XMLattachments:=PDF Get attachments($file).query("mimeType = :1"; "text/xml")
If ($XMLattachments.length#0)
$xml:=BLOB to text($XMLattachments[0].content; UTF8 text without length)
$dom:=DOM Parse XML variable($xml)
End if
La documentazione del componente su github descrive in dettaglio altre funzioni (controllo, aggiornamento, ecc.).
Un esempio di dialogo di estrazione
L’HDI fornito dimostra come visualizzare gli allegati in una casella di riepilogo in base alla raccolta restituita.
Conclusione
Questo componente, il cui codice sorgente è disponibile su GitHub, sfrutta la libreria QPDF (una soluzione open source disponibile gratuitamente qui) per fornire un metodo affidabile per estrarre gli allegati dai file PDF/A-3 all’interno delle applicazioni 4D. È pronto all’uso tramite il gestore di componenti, con la possibilità di personalizzarlo in base alle proprie esigenze o all’evoluzione della libreria QPDF.