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

// "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.

Ayrıca bakınız