V éře online podnikání se používání digitálních faktur a účtenek značně zvýšilo. Podobně náročná je také efektivní extrakce dat z těchto digitálních faktur. V tomto článku budete vědět, jak extrahovat data z faktur nebo účtenek PDF programově v Java. Dříve jsme viděli extrakce fakturačních údajů pomocí C# v jednom z dřívějších příspěvků.

Extrahujte data z faktur nebo účtenek PDF

Java API pro analýzu dokumentů a extrakci dat

Budu používat GroupDocs.Parser for Java k analýze faktur PDF a extrahování datových hodnot v aplikaci Java. Toto API také umožňuje extrahování textu, obrázků a metadat z dokumentů, obrázků, prezentací, archivů, e-mailů a mnoha dalších podporovaných formátů dokumentů.

Stáhnout nebo Konfigurovat

Z části ke stažení si můžete stáhnout soubor JAR nebo jen získat konfigurace úložiště a závislostí pro pom.xml vašich Java aplikací založených na maven.

Jak extrahovat fakturační data PDF v Java

Následující kroky vám umožní snadno extrahovat data z PDF faktur pomocí Java.

  • Vytvořte šablonu.
  • Analyzujte PDF fakturu podle vytvořené šablony.
  • Extrahujte informace z analyzovaného PDF.

Vytvořte šablonu pro fakturu

Níže je šablona, která je vytvořena podle faktury. Použitou fakturu si také můžete stáhnout z ukázkových souborů dostupných v úložišti GitHub.

// Vytvořte šablonu pro analýzu dat z faktury pomocí Java
// Nejprve vytvořte položky šablony
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")
};
// Transformujte do šablony
Template template = new Template(Arrays.asList(templateItems));

Analyzujte fakturu/stvrzenku PDF pro extrakci dat

Následující řádky analyzují PDF fakturu podle vytvořené šablony a extrahují data faktury pomocí jednoduchého Java kódu.

// Analyzujte fakturu PDF pomocí definované šablony v Java
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// Vytiskněte extrahovaná data
for (int i = 0; i < data.getCount(); i++) {
    // Název tiskového pole
    System.out.print(data.get(i).getName() + ": ");
    // Odeslání hodnoty vlastnosti PageArea do PageTextArea
    // protože jsme v šabloně definovali pouze textová pole
    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());
}

Výstup

Následuje výstup výše uvedeného kódu po extrakci dat z faktury.

**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

V GitHub Repository je k dispozici mnoho dalších příkladů s otevřeným zdrojovým kódem. Můžete si stáhnout kód a rychle spustit příklady. Další pokyny a některé další způsoby použít šablony pro analýzu a extrakci dat v Java naleznete v příručce pro vývojáře v dokumentaci. V případě jakýchkoli dalších potíží kontaktujte tým podpory kdykoli zdarma na fóru.

Viz také