Extraction de fichiers PDF/A3

Traduit automatiquement de Deepl

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.

    Roland Lannuzel
    - Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.