En la era de los negocios en línea, el uso de facturas y recibos digitales ha aumentado considerablemente. Del mismo modo, la extracción eficiente de datos de estas facturas digitales también es exigente. En este artículo, sabrá cómo extraer datos de facturas o recibos en PDF mediante programación en Java. Anteriormente hemos visto la extracción de datos de factura usando C# en una de las publicaciones anteriores.

Extraiga datos de facturas o recibos en PDF

API de Java de análisis de documentos y extracción de datos

Usaré GroupDocs.Parser for Java para analizar facturas en PDF y extraer valores de datos dentro de la aplicación Java. Esta API también permite extraer texto, imágenes y metadatos de documentos, imágenes, presentaciones, archivos, correos electrónicos y muchos otros formatos de documentos compatibles.

Descargar o configurar

Desde la sección de descargas, puede descargar el archivo JAR o simplemente obtener el repositorio y las configuraciones de dependencia para el pom.xml de sus aplicaciones Java basadas en maven.

Cómo extraer datos de facturas en PDF en Java

Los siguientes pasos le permitirán extraer fácilmente datos de las facturas en PDF utilizando Java.

  • Crear una plantilla.
  • Analice la factura en PDF de acuerdo con la plantilla creada.
  • Extraiga la información del PDF analizado.

Crear plantilla para la factura

A continuación se muestra la plantilla que se crea de acuerdo con la factura. También puede descargar la factura usada de los archivos de muestra disponibles en el repositorio de GitHub.

// Crear plantilla para analizar datos de factura usando Java
// Primero cree elementos de plantilla
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")
};
// Transformar en plantilla
Template template = new Template(Arrays.asList(templateItems));

Parse PDF Factura/Recibo para extracción de datos

Las siguientes líneas analizarán la factura en PDF de acuerdo con la plantilla creada y extraerán los datos de la factura utilizando un código Java simple.

// Analice la factura en PDF usando la plantilla definida en Java
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// Imprimir los datos extraídos
for (int i = 0; i < data.getCount(); i++) {
    // Nombre del campo de impresión
    System.out.print(data.get(i).getName() + ": ");
    // Convertir el valor de la propiedad PageArea en PageTextArea
    // ya que hemos definido solo campos de texto en la plantilla
    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());
}

La salida

El siguiente es el resultado del código anterior después de la extracción de datos de la factura.

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

Hay muchos otros ejemplos de código abierto disponibles en GitHub Repository. Puede descargar el código y ejecutar rápidamente los ejemplos. Para obtener más orientación y otras formas de usar plantillas para analizar y extraer datos en Java, visite la guía para desarrolladores en la documentación. En caso de cualquier dificultad adicional, comuníquese con el equipo de soporte de forma gratuita, en cualquier momento en el foro.

Ver también