В эпоху онлайн-бизнеса использование цифровых счетов-фактур и квитанций значительно увеличилось. Точно так же требуется эффективное извлечение данных из этих цифровых счетов-фактур. В этой статье вы узнаете, как программно извлекать данные из счетов или квитанций в формате PDF на Java. Ранее мы видели извлечение данных счета с помощью C# в одном из предыдущих сообщений.
Анализ документов и извлечение данных Java API
Я буду использовать GroupDocs.Parser for Java для анализа счетов-фактур в формате PDF и извлечения значений данных в приложении Java. Этот API также позволяет извлекать текст, изображения и метаданные из документов, изображений, презентаций, архивов, электронной почты и многих других поддерживаемых форматов документов.
Загрузите или настройте
Из раздела загрузок вы можете загрузить файл JAR или просто получить репозиторий и конфигурации зависимостей для pom.xml ваших на основе maven приложений Java.
Как извлечь данные счета-фактуры 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 см. в руководстве разработчика в документации. В случае каких-либо дальнейших трудностей, обратитесь в службу поддержки бесплатно в любое время на форуме.