Çevrimiçi işletmeler çağında, dijital fatura ve makbuzların kullanımı büyük ölçüde artmıştır. Benzer şekilde, bu dijital faturalardan verimli veri çıkarma da zahmetlidir. Bu makalede, Java’da programlı olarak PDF faturalarından veya makbuzlardan nasıl veri çıkarılacağını öğreneceksiniz. Daha önce, önceki gönderilerden birinde C# kullanarak fatura verilerinin çıkarılması’nı görmüştük.
Belge Ayrıştırma ve Veri Çıkarma Java API
Java uygulamasında PDF faturalarını ayrıştırmak ve veri değerlerini çıkarmak için GroupDocs.Parser for Java kullanacağım. Bu API ayrıca belgelerden, resimlerden, sunumlardan, arşivlerden, e-postadan ve diğer pek çok [desteklenen belge biçiminden] metin, resim ve meta verilerin çıkarılmasına izin verir.
İndirin veya Yapılandırın
İndirilenler bölümünden, JAR dosyasını indirebilir veya sadece maven tabanlı Java uygulamalarınızın pom.xml dosyası için depo ve bağımlılık yapılandırmalarını alabilirsiniz.
Java’da PDF Fatura Verilerini Çıkarma
Aşağıdaki adımlar, Java kullanarak PDF faturalarından verileri kolayca çıkarmanıza olanak tanır.
- Bir şablon oluşturun.
- PDF faturasını oluşturulan şablona göre ayrıştırın.
- Ayrıştırılmış PDF’den bilgileri çıkarın.
Fatura için Şablon Oluşturun
Faturaya göre oluşturulan şablon aşağıdadır. Kullanılmış faturayı GitHub deposunda bulunan örnek dosyalardan da indirebilirsiniz.
// Java kullanarak Faturadaki Verileri Ayrıştırmak için Şablon Oluşturma
// Önce Şablon Öğeleri oluşturun
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")
};
// Şablona dönüştür
Template template = new Template(Arrays.asList(templateItems));
Veri Çıkarma için PDF Faturayı/Fişini Ayrıştırma
Aşağıdaki satırlar, PDF faturasını oluşturulan şablona göre ayrıştıracak ve basit Java kodunu kullanarak fatura verilerini çıkaracaktır.
// Java'da tanımlanmış Şablonu kullanarak PDF Faturasını ayrıştırın
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// Ayıklanan verileri yazdır
for (int i = 0; i < data.getCount(); i++) {
// Alan Adını Yazdırma
System.out.print(data.get(i).getName() + ": ");
// PageArea özellik değerini PageTextArea olarak atayın
// şablonda yalnızca metin alanları tanımladığımız için
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());
}
Çıktı
Faturadan veri çıkarıldıktan sonra yukarıdaki kodun çıktısı aşağıdadır.
**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‘de başka birçok açık kaynak örneği mevcuttur. Kodu indirebilir ve örnekleri hızlıca çalıştırabilirsiniz. Daha fazla rehberlik ve Java’da ayrıştırma ve veri çıkarma için şablonları kullanma için diğer bazı yollar için belgelerdeki geliştirici kılavuzunu ziyaret edin. Herhangi bir başka zorluk durumunda, istediğiniz zaman forumda destek ekibine ücretsiz olarak ulaşın.