Im Zeitalter des Online-Geschäfts hat die Verwendung digitaler Rechnungen und Quittungen stark zugenommen. Ebenso anspruchsvoll ist die effiziente Datenextraktion aus diesen digitalen Rechnungen. In diesem Artikel erfahren Sie, wie Sie Daten aus PDF-Rechnungen oder Quittungen programmgesteuert in Java extrahieren. Zuvor haben wir die Extraktion von Rechnungsdaten mit C# in einem der früheren Posts gesehen.

Extrahieren Sie Daten aus PDF-Rechnungen oder Quittungen

Dokumentenanalyse und Datenextraktion Java API

Ich werde GroupDocs.Parser for Java verwenden, um PDF-Rechnungen zu parsen und Datenwerte innerhalb der Java-Anwendung zu extrahieren. Diese API ermöglicht auch das Extrahieren von Text, Bildern und Metadaten aus Dokumenten, Bildern, Präsentationen, Archiven, E-Mails und vielen anderen unterstützten Dokumentformaten.

Herunterladen oder konfigurieren

Aus dem Download-Bereich können Sie die JAR-Datei herunterladen oder einfach die Repository- und Abhängigkeitskonfigurationen für die pom.xml Ihrer maven-basierten Java-Anwendungen abrufen.

So extrahieren Sie PDF-Rechnungsdaten in Java

Mit den folgenden Schritten können Sie mit Java ganz einfach Daten aus den PDF-Rechnungen extrahieren.

  • Erstellen Sie eine Vorlage.
  • Analysieren Sie die PDF-Rechnung gemäß der erstellten Vorlage.
  • Extrahieren Sie die Informationen aus dem geparsten PDF.

Vorlage für die Rechnung erstellen

Unten ist die Vorlage, die gemäß der Rechnung erstellt wird. Sie können die verwendete Rechnung auch aus den Beispieldateien herunterladen, die im GitHub-Repository verfügbar sind.

// Erstellen Sie eine Vorlage zum Analysieren von Daten aus Rechnungen mit Java
// Erstellen Sie zuerst Vorlagenelemente
TemplateItem[] templateItems = new TemplateItem[]
{
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 135), new Size(100, 10))), "FromCompany"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 150), new Size(100, 35))), "FromAddress"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 190), new Size(150, 2))), "FromEmail"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 250), new Size(100, 2))), "ToCompany"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 260), new Size(100, 15))), "ToAddress"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 290), new Size(150, 2))), "ToEmail"),
    new TemplateField(new TemplateRegexPosition("Invoice Number"), "InvoiceNumber"),
    new TemplateField(new TemplateLinkedPosition(
            "InvoiceNumber",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "InvoiceNumberValue"),
    new TemplateField(new TemplateRegexPosition("Order Number"), "InvoiceOrder"),
    new TemplateField(new TemplateLinkedPosition(
            "InvoiceOrder",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "InvoiceOrderValue"),
    new TemplateField(new TemplateRegexPosition("Invoice Date"), "InvoiceDate"),
    new TemplateField(new TemplateLinkedPosition(
            "InvoiceDate",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "InvoiceDateValue"),
    new TemplateField(new TemplateRegexPosition("Due Date"), "DueDate"),
    new TemplateField(new TemplateLinkedPosition(
            "DueDate",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "DueDateValue"),
    new TemplateField(new TemplateRegexPosition("Total Due"), "TotalDue"),
    new TemplateField(new TemplateLinkedPosition(
            "TotalDue",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "TotalDueValue")
};
// In Vorlage umwandeln
Template template = new Template(Arrays.asList(templateItems));

PDF-Rechnung/Quittung zur Datenextraktion analysieren

Die folgenden Zeilen parsen die PDF-Rechnung gemäß der erstellten Vorlage und extrahieren die Rechnungsdaten mit einfachem Java-Code.

// Analysieren Sie die PDF-Rechnung mithilfe der definierten Vorlage in Java
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// Drucken Sie die extrahierten Daten
for (int i = 0; i < data.getCount(); i++) {
    // Feldname drucken
    System.out.print(data.get(i).getName() + ": ");
    // Wandeln Sie den PageArea-Eigenschaftswert in PageTextArea um
    // da wir in der Vorlage nur Textfelder definiert haben
    PageTextArea area = data.get(i).getPageArea() instanceof PageTextArea
            ? (PageTextArea) data.get(i).getPageArea()
            : null;
    System.out.println(area == null ? "Not a template field" : area.getText());
}

Die Ausgabe

Das Folgende ist die Ausgabe des obigen Codes nach dem Extrahieren von Daten aus der Rechnung.

**FROMCOMPANY:**    DEMO - Sliced Invoices
**FROMADDRESS:**    Suite 5A-1204
123 Somewhere Street
Your City AZ 12345
**FROMEMAIL:**     admin@slicedinvoices.com
**TOCOMPANY:**    Test Business
**TOADDRESS:**    123 Somewhere St
Melbourne, VIC 3000
**INVOICENUMBER:**             Invoice Number
**INVOICENUMBERVALUE:** NV-3337
**INVOICEORDER:**                Order Number
**INVOICEORDERVALUE:**    12345
**INVOICEDATE:**                    Invoice Date
**INVOICEDATEVALUE:**        January 25, 2016
**DUEDATE:**                           Due Date
**DUEDATEVALUE:**               January 31, 2016
**TOTALDUE:**                         Total Due
**TOTALDUEVALUE:**             $93.50

Es gibt viele andere Open-Source-Beispiele, die unter GitHub Repository verfügbar sind. Sie können den Code herunterladen und die Beispiele schnell ausführen. Weitere Anleitungen und einige andere Möglichkeiten zur Verwendung von Vorlagen für die Analyse und Datenextraktion in Java finden Sie im Entwicklerhandbuch in der Dokumentation. Bei weiteren Schwierigkeiten erreichen Sie das Support-Team jederzeit kostenlos im Forum.

Siehe auch