Di era bisnis online, penggunaan invoice dan kuitansi digital semakin meningkat. Demikian pula, ekstraksi data yang efisien dari faktur digital ini juga menuntut. Pada artikel ini, Anda akan mengetahui cara mengekstrak data dari faktur atau tanda terima PDF secara terprogram di Java. Sebelumnya kita telah melihat ekstraksi data invoice menggunakan C# di salah satu postingan sebelumnya.
Penguraian Dokumen dan Ekstraksi Data Java API
Saya akan menggunakan GroupDocs.Parser for Java untuk mengurai faktur PDF dan mengekstrak nilai data dalam aplikasi Java. API ini juga memungkinkan untuk mengekstraksi teks, gambar, dan metadata dari dokumen, gambar, presentasi, arsip, email, dan banyak [format dokumen yang didukung] lainnya4.
Unduh atau Konfigurasi
Dari bagian unduhan, Anda dapat mengunduh file JAR atau hanya mendapatkan konfigurasi repositori dan ketergantungan untuk pom.xml aplikasi Java berbasis maven Anda.
Cara Mengekstrak Data Faktur PDF di Java
Langkah-langkah berikut akan memungkinkan Anda mengekstrak data dengan mudah dari faktur PDF menggunakan Java.
- Buat templat.
- Parsing faktur PDF sesuai dengan template yang dibuat.
- Ekstrak informasi dari PDF yang diurai.
Buat Template untuk Faktur
Di bawah ini adalah template yang dibuat sesuai dengan invoice. Anda juga dapat mengunduh faktur bekas dari file sampel yang tersedia di repositori GitHub.
// Buat Template untuk Mengurai Data dari Faktur menggunakan Java
// Pertama buat Item Templat
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")
};
// Ubah menjadi templat
Template template = new Template(Arrays.asList(templateItems));
Parsing Faktur/Tanda Terima PDF untuk Ekstraksi Data
Baris berikut akan mengurai faktur PDF sesuai dengan template yang dibuat dan mengekstrak data faktur menggunakan kode Java sederhana.
// Parsing Faktur PDF menggunakan Templat yang ditentukan di Java
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// Cetak data yang diekstraksi
for (int i = 0; i < data.getCount(); i++) {
// Nama Bidang Pencetakan
System.out.print(data.get(i).getName() + ": ");
// Keluarkan nilai properti PageArea ke PageTextArea
// karena kami hanya mendefinisikan bidang teks dalam template
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());
}
Hasil
Berikut adalah output dari kode di atas setelah ekstraksi data dari invoice.
**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
Ada banyak contoh sumber terbuka lain yang tersedia di Repositori GitHub. Anda dapat mengunduh kode dan menjalankan contoh dengan cepat. Untuk panduan lebih lanjut dan beberapa cara lain untuk menggunakan template untuk parsing dan ekstraksi data di Java, kunjungi panduan developer di dokumentasi. Jika ada kesulitan lebih lanjut, hubungi tim dukungan secara gratis, kapan saja di forum.