W dobie firm internetowych znacznie wzrosło wykorzystanie cyfrowych faktur i paragonów. Podobnie, wydajna ekstrakcja danych z tych cyfrowych faktur jest również wymagająca. W tym artykule dowiesz się, jak programowo wyodrębnić dane z faktur lub paragonów PDF w Javie. Wcześniej widzieliśmy wyodrębnianie danych faktury za pomocą C# w jednym z wcześniejszych postów.

Wyodrębnij dane z faktur PDF lub paragonów

Parsowanie dokumentów i ekstrakcja danych Java API

Będę używał GroupDocs.Parser for Java do analizowania faktur PDF i wydobywania wartości danych w aplikacji Java. Ten interfejs API umożliwia także wyodrębnianie tekstu, obrazów i metadanych z dokumentów, obrazów, prezentacji, archiwów, wiadomości e-mail i wielu innych obsługiwanych formatów dokumentów.

Pobierz lub skonfiguruj

Z sekcji pobierania możesz pobrać plik JAR lub po prostu pobrać repozytorium i konfiguracje zależności dla pliku pom.xml aplikacji Java opartych na Maven.

Jak wyodrębnić dane faktury PDF w Javie

Poniższe kroki pozwolą Ci łatwo wyodrębnić dane z faktur PDF za pomocą Java.

  • Utwórz szablon.
  • Przeanalizuj fakturę PDF zgodnie z utworzonym szablonem.
  • Wyodrębnij informacje z przeanalizowanego pliku PDF.

Utwórz szablon dla faktury

Poniżej znajduje się szablon, który jest tworzony zgodnie z fakturą. Możesz również pobrać wykorzystaną fakturę z przykładowych plików dostępnych w repozytorium GitHub.

// Utwórz szablon do analizy danych z faktury za pomocą języka Java
// Najpierw utwórz elementy szablonu
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")
};
// Przekształć w szablon
Template template = new Template(Arrays.asList(templateItems));

Analizuj fakturę / paragon w formacie PDF w celu wyodrębnienia danych

Poniższe wiersze przeanalizują fakturę PDF zgodnie z utworzonym szablonem i wyodrębnią dane faktury za pomocą prostego kodu Java.

// Przeanalizuj fakturę PDF przy użyciu zdefiniowanego szablonu w Javie
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// Wydrukuj wyodrębnione dane
for (int i = 0; i < data.getCount(); i++) {
    // Drukowanie nazwy pola
    System.out.print(data.get(i).getName() + ": ");
    // Rzuć wartość właściwości PageArea na PageTextArea
    // ponieważ w szablonie zdefiniowaliśmy tylko pola tekstowe
    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());
}

Wyjście

Poniżej przedstawiono wyjście powyższego kodu po ekstrakcji danych 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

Istnieje wiele innych przykładów open-source dostępnych w GitHub Repository. Możesz pobrać kod i szybko uruchomić przykłady. Aby uzyskać więcej wskazówek i poznać inne sposoby używania szablonów do analizowania i wyodrębniania danych w Javie, odwiedź przewodnik programisty w dokumentacji. W przypadku dalszych trudności skontaktuj się bezpłatnie z zespołem pomocy technicznej w dowolnym momencie na forum.

Zobacz też