Fatura ve makbuzlar, hizmet veya mal alım satımı söz konusu olduğunda yapılan işlemlerin belirli bir formatta kaydedilmesine yarayan belgelerdir. İşler dijitalleşti ve çevrimiçi alışverişin popülaritesi ile dijital faturalar yaygın olarak kullanılıyor. Bir dizi dijital faturayı işlemek ve bilgileri manuel olarak çıkarmak karmaşık olduğu kadar zaman alan bir süreçtir. Bu nedenle, böyle bir durum için daha hızlı ama verimli bir yola ihtiyacınız var. Bu nedenle, bu makalede, GroupDocs.Parser for .NET API’sini kullanarak C#’ta programlı olarak bir PDF faturasından veya makbuzdan veri çıkarmayı göstereceğim.
PDF Faturasından Veri Çıkarmak için İş Akışı
Aşağıda, GroupDocs.Parser for .NET kullanılarak bir PDF faturasından verilerin nasıl çıkarılacağına ilişkin iş akışı yer almaktadır.
- Tablolardan veri çıkarmak için tablo parametreleri oluşturun.
- Alanlardan veri ayıklamak için şablon öğeleri oluşturun.
- Faturayı verilen şablona göre ayrıştırın.
- Verileri çıkarın.
Fatura
Verileri çıkarmak için kullanacağım örnek bir PDF faturasının ekran görüntüsü aşağıdadır. Bu faturayı GitHub depomuzdan indirebilirsiniz.

Kod
- Verilen fatura için şablon oluşturun (şablonlar hakkında daha fazlasını okuyun).
// "Ayrıntılar" tablosu için dedektör parametreleri oluşturun
TemplateTableParameters detailsTableParameters = new TemplateTableParameters(new Rectangle(new Point(35, 320), new Size(530, 55)), null);
// "Özet" tablosu için dedektör parametreleri oluşturun
TemplateTableParameters summaryTableParameters = new TemplateTableParameters(new Rectangle(new Point(330, 385), new Size(220, 65)), null);
// Şablon öğeleri koleksiyonu 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"),
new TemplateTable(detailsTableParameters, "details", null),
new TemplateTable(summaryTableParameters, "summary", null)
};
// Bir belge şablonu oluşturun
Template template = new Template(templateItems);
- Faturayı ayrıştırın ve verileri çıkarın.
// Parser sınıfının bir örneğini oluşturun
using (Parser parser = new Parser("invoice.pdf"))
{
// Belgeyi şablona göre ayrıştırın
DocumentData data = parser.ParseByTemplate(template);
// Ayıklanan tüm verileri yazdır
for (int i = 0; i < data.Count; i++)
{
Console.Write(data[i].Name + ": ");
// Alanın bir tablo olup olmadığını kontrol edin
PageTableArea area = data[i].PageArea as PageTableArea;
if (area == null)
{
PageArea pageArea = data[i].PageArea;
Console.WriteLine(pageArea.ToString());
}
else
{
// Tablo satırları aracılığıyla yineleme
for (int row = 0; row < area.RowCount; row++)
{
// Tablo sütunları aracılığıyla yineleme
for (int column = 0; column < area.ColumnCount; column++)
{
// Hücre değerini al
PageTextArea cellValue = area[row, column].PageArea as PageTextArea;
// Sütunlar arasındaki boşluğu yazdır
if (column > 0)
{
Console.Write("\t");
}
// Hücre değerini yazdır
Console.Write(cellValue == null ? "" : cellValue.Text);
}
// Yeni satır yazdır
Console.WriteLine();
}
}
}
}
Çıktı

.NET API için GroupDocs.Parser hakkında daha fazlasını keşfetmek için belgeleri ziyaret edin. Herhangi bir soru veya sorunuz olması durumunda forumumuzdan bize ulaşın.