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.