В еру онлайн-бізнесу використання цифрових рахунків-фактур і квитанцій значно зросло. Подібним чином, ефективне вилучення даних із цих цифрових рахунків також є вимогливим. У цій статті ви дізнаєтеся, як програмно витягувати дані з PDF-рахунків-фактур або квитанцій у Java. Раніше ми бачили вилучення даних рахунків-фактур за допомогою C# в одній із попередніх публікацій.

Витягуйте дані з PDF-рахунків-фактур або квитанцій

Java API аналізу документів і вилучення даних

Я буду використовувати GroupDocs.Parser for Java для аналізу PDF-рахунків-фактур і вилучення значень даних у програмі Java. Цей API також дозволяє отримувати текст, зображення та метадані з документів, зображень, презентацій, архівів, електронної пошти та багатьох інших підтримуваних форматів документів.

Завантажити або налаштувати

З розділу завантажень ви можете завантажити файл JAR або просто отримати репозиторій і конфігурації залежностей для pom.xml ваших програм Java на основі Maven.

Як витягнути дані рахунку-фактури PDF у Java

Наступні кроки дозволять вам легко витягувати дані з PDF-рахунків-фактур за допомогою Java.

  • Створіть шаблон.
  • Розберіть рахунок-фактуру PDF відповідно до створеного шаблону.
  • Витягніть інформацію з проаналізованого PDF-файлу.

Створіть шаблон для рахунка-фактури

Нижче наведено шаблон, створений відповідно до накладної. Ви також можете завантажити використаний рахунок із файлів зразків, доступних у сховищі GitHub.

// Створіть шаблон для аналізу даних із рахунку-фактури за допомогою Java
// Спочатку створіть елементи шаблону
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")
};
// Перетворіть на шаблон
Template template = new Template(Arrays.asList(templateItems));

Проаналізуйте PDF рахунок-фактуру/квитанцію для вилучення даних

Наступні рядки проаналізують PDF-рахунок-фактуру відповідно до створеного шаблону та витягнуть дані рахунку-фактури за допомогою простого коду Java.

// Проаналізуйте PDF-рахунок-фактуру за допомогою визначеного шаблону в Java
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// Роздрукуйте отримані дані
for (int i = 0; i < data.getCount(); i++) {
    // Друк назви поля
    System.out.print(data.get(i).getName() + ": ");
    // Транслюйте значення властивості PageArea до PageTextArea
    // оскільки ми визначили лише текстові поля в шаблоні
    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());
}

Вихід

Нижче наведено вихідний код вищезазначеного коду після вилучення даних із рахунку-фактури.

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

У GitHub Repository є багато інших прикладів із відкритим кодом. Ви можете завантажити код і швидко запустити приклади. Щоб отримати додаткові вказівки та деякі інші способи використання шаблонів для синтаксичного аналізу та вилучення даних у Java, відвідайте посібник розробника в документації. У разі подальших труднощів зв’яжіться з командою підтримки безкоштовно в будь-який час на форумі.

Дивись також