Nell’era delle attività online, l’uso di fatture e ricevute digitali è ampiamente aumentato. Allo stesso modo, anche l’estrazione efficiente dei dati da queste fatture digitali è impegnativa. In questo articolo imparerai come estrarre dati da fatture o ricevute PDF in modo programmatico in Java. In precedenza abbiamo visto l’estrazione dei dati della fattura utilizzando C# in uno dei post precedenti.

Estrai dati da fatture o ricevute PDF

API Java per l’analisi e l’estrazione dei dati di documenti

Utilizzerò GroupDocs.Parser per Java per analizzare le fatture PDF ed estrarre i valori dei dati all’interno dell’applicazione Java. Questa API consente anche di estrarre testo, immagini e metadati da documenti, immagini, presentazioni, archivi, e-mail e molti altri formati di documento supportati.

Scarica o configura

Dalla sezione download, puoi scaricare il file JAR o semplicemente ottenere il repository e le configurazioni delle dipendenze per il pox.xml delle tue applicazioni Java basate su maven.

Come estrarre i dati della fattura PDF in Java

I seguenti passaggi ti permetteranno di estrarre facilmente i dati dalle fatture PDF utilizzando Java.

  • Crea un modello.
  • Analizza la fattura PDF in base al modello creato.
  • Estrarre le informazioni dal PDF analizzato.

Crea modello per la fattura

Di seguito è riportato il modello che viene creato in base alla fattura. Puoi anche scaricare la fattura utilizzata dai file di esempio disponibili nel repository GitHub.

// Crea un modello per analizzare i dati dalla fattura utilizzando Java
// Per prima cosa crea gli elementi del modello
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")
};
// Trasforma in modello
Template template = new Template(Arrays.asList(templateItems));

Analizza fattura/ricevuta PDF per estrazione dati

Le righe seguenti analizzeranno la fattura PDF in base al modello creato ed estrarranno i dati della fattura utilizzando un semplice codice Java.

// Analizza la fattura PDF utilizzando il modello definito in Java
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// Stampa i dati estratti
for (int i = 0; i < data.getCount(); i++) {
    // Stampa del nome del campo
    System.out.print(data.get(i).getName() + ": ");
    // Trasmetti il valore della proprietà PageArea a PageTextArea
    // poiché abbiamo definito solo i campi di testo nel modello
    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());
}

L’output

Di seguito l’output del codice sopra riportato dopo l’estrazione dei dati dalla fattura.

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

Ci sono molti altri esempi open source disponibili su GitHub Repository. Puoi scaricare il codice ed eseguire rapidamente gli esempi. Per ulteriori indicazioni e altri modi per utilizzare i modelli per l’analisi e l’estrazione dei dati in Java, visitare la guida per gli sviluppatori nella documentazione. In caso di ulteriori difficoltà, contatta il team di supporto gratuitamente, in qualsiasi momento sul forum.

Guarda anche