Dans les articles précédents, nous avons exploré l’incorporation de documents dans des fichiers PDF/A-3 à l’aide de 4D Write Pro, y compris la génération de factures électroniques. La facturation électronique devenant obligatoire dans plusieurs pays européens, tels que la France et l’Allemagne la possibilité d’extraire des fichiers XML integrés à ces PDF devient cruciale. Mais l’utilité de PDF/A-3 ne se limite pas aux factures ; ces fichiers peuvent contenir divers types de documents qui peuvent nécessiter également une extraction.
Alors que des outils comme Adobe Acrobat Reader permettent une extraction manuelle, cet article présente une méthode efficace et automatisée utilisant 4D 20 R6 pour gérer facilement le processus.
HDI : Extraction de fichiers PDF/A3
Un composant dédié
Un composant dédié a été développé pour vous permettre d’extraire tous les fichiers d’enceinte (en mémoire) et de les gérer comme vous le souhaitez une fois que vous l’avez fait. Par exemple, un fichier XML peut être analysé directement dans un arbre DOM, tandis qu’un fichier image peut être sauvegardé sur le disque, etc.
GESTIONNAIRE DE COMPOSANTS
Ce composant peut être facilement installé grâce au gestionnaire de composants qui est très simple à utiliser et qui fait partie de 4D 20 R6. Il suffit de créer un fichier dependencies.json dans votre dossier Sources et d’y taper ces quelques lignes. Le composant sera installé dès le lancement de votre projet. Le HDI fourni est basé sur ce mécanisme.
{
"dependencies":
{
"4D-QPDF":
{
"github": "4d/4D-QPDF",
"version":"*"
}
}
}
Extraction
Une seule méthode du composant vous permettra d’obtenir la liste et le contenu des documents inclus dans un fichier PDF.
$colAttachments:=PDF Get attachments ($PDFfile)
Cette méthode renvoie une collection contenant des objets, chacun décrivant et contenant une pièce jointe.
Ils contiendront des attributs tels que name, extension, fullName, mimeType, content, etc., décrits en détail dans le HDI et dans la documentation du composant.
$path:="/DATA/TestPDFs/ManyEnclosures.pdf"
$PDFfile:=File($path; fk posix path)
Form.attachments:=PDF Get attachments($PDFfile)
Bien entendu, dans le cas des factures électroniques, vous pouvez aller directement à l’élément xml inclus !
$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 documentation du composant sur github décrit en détail d’autres fonctions (vérification, mise à jour, etc.).
Un exemple de dialogue d’extraction
Le HDI montre comment afficher les pièces jointes dans une list box en fonction de la collection renvoyée.
Conclusion
Ce composant, dont le code source est disponible sur GitHub, s’appuie sur la bibliothèque QPDF (une solution open-source disponible gratuitement ici) pour fournir une méthode fiable d’extraction de pièces jointes à partir de fichiers PDF/A-3 dans vos applications 4D. Il est prêt à l’emploi via le gestionnaire de composants, avec la possibilité de le personnaliser en fonction de vos besoins ou de l’évolution de la bibliothèque QPDF.