PDF/A3-Datei-Extraktion

Automatisch übersetzt von Deepl

In früheren Beiträgen haben wir uns mit dem Einbetten von Dokumenten in PDF/A-3-Dateien mit 4D Write Pro beschäftigt, einschließlich der Erstellung elektronischer Rechnungen. Da die elektronische Rechnungsstellung in verschiedenen europäischen Ländern – wie Frankreich und Deutschland –obligatorisch wird , ist die Möglichkeit, eingebettete XML-Dateien aus diesen PDFs zu extrahieren, von entscheidender Bedeutung. Der Nutzen von PDF/A-3 geht jedoch über Rechnungen hinaus; diese Dateien können verschiedene Dokumenttypen enthalten, die extrahiert werden müssen.

Während Tools wie der Adobe Acrobat Reader eine manuelle Extraktion ermöglichen, wird in diesem Beitrag eine effiziente, automatisierte Methode mit 4D 20 R6 vorgestellt, die den Prozess vereinfacht.

HDI: Extraktion von PDF/A3-Dateien

Eine spezielle Komponente

Es wurde eine spezielle Komponente entwickelt, die es Ihnen ermöglicht, alle Beilagen (im Speicher) zu extrahieren und sie anschließend nach Ihren Wünschen zu verwalten. Zum Beispiel kann eine XML-Datei direkt in einen DOM-Baum geparst werden, während eine Bilddatei auf der Festplatte gespeichert werden kann, usw.

KOMPONENTENMANAGER

Diese Komponente kann dank des Komponentenmanagers, der Teil von 4D 20 R6 ist, ganz einfach installiert werden. Erstellen Sie einfach eine dependencies.json Datei in Ihrem Sources Ordner und geben Sie diese einfachen Zeilen ein. Die Komponente wird installiert, sobald Ihr Projekt gestartet wird. Der mitgelieferte HDI basiert auf diesem Mechanismus.

{
"dependencies":
 {
  "4D-QPDF":
  {
  "github": "4d/4D-QPDF",
  "version":"*"
  }
 }
}

Extraktion

Eine einzige Methode der Komponente ermöglicht es Ihnen, die Liste und den Inhalt der enthaltenen Dokumente in einer PDF-Datei zu erhalten.

$colAttachments:=PDF Get attachments ($PDFfile)

Diese Methode gibt eine Sammlung von Objekten zurück, die jeweils einen Anhang beschreiben und enthalten.

Sie enthalten Attribute wie name, extension, fullName, mimeType, content, usw., die im HDI und in der Dokumentation der Komponente ausführlich beschrieben sind.

    $path:="/DATA/TestPDFs/ManyEnclosures.pdf"
    $PDFfile:=File($path; fk posix path)
    Form.attachments:=PDF Get attachments($PDFfile)

    Im Falle von elektronischen Rechnungen können Sie natürlich auch direkt auf das enthaltene xml-Element zugreifen!

    $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 

    Die Komponentendokumentation auf github beschreibt weitere Funktionen (prüfen, aktualisieren, etc.) im Detail.

    Ein Beispiel für einen Extraktionsdialog

    Das mitgelieferte HDI zeigt, wie man die Anlagen in einer Listbox auf Basis der zurückgegebenen Sammlung anzeigt.

    Fazit

    Diese Komponente, deren Quellcode auf GitHub verfügbar ist, nutzt die QPDF-Bibliothek (eine Open-Source-Lösung, die hier frei verfügbar ist), um eine zuverlässige Methode zum Extrahieren von Anhängen aus PDF/A-3-Dateien innerhalb Ihrer 4D-Anwendungen bereitzustellen. Es ist sofort über den Komponentenmanager einsatzbereit und kann flexibel angepasst werden, wenn Ihre Anforderungen wachsen oder die QPDF Bibliothek sich weiterentwickelt.

    Roland Lannuzel
    - Product Owner & 4D Experte - Nach seinem Studium der Elektronik arbeitete Roland als Entwickler und Berater in der industriellen IT-Branche, wo er Lösungen für Kunden mit einer Vielzahl von Datenbanken und Technologien entwickelte. In den späten 80er Jahren verliebte er sich in 4D und setzte es bei der Entwicklung von Geschäftsanwendungen wie Buchhaltungs-, Abrechnungs- und E-Mail-Systemen ein. 1997 trat er schließlich in das Unternehmen ein und leistete einen wertvollen Beitrag, indem er Spezifikationen, Testtools und Demos entwarf, Schulungen durchführte und auf vielen Konferenzen für die 4D Community sprach. Er gestaltet die Zukunft von 4D aktiv mit, indem er neue Funktionen und Datenbankentwicklungstools definiert.