Faktur dan tanda terima adalah dokumen yang digunakan untuk mencatat transaksi dalam format tertentu saat membeli atau menjual layanan atau barang yang terlibat. Banyak hal telah menjadi digital dan dengan popularitas belanja online, faktur digital banyak digunakan. Memproses sejumlah faktur digital dan mengekstraksi informasi secara manual merupakan proses yang rumit dan memakan waktu. Jadi, Anda memerlukan cara yang lebih cepat namun efisien untuk kasus seperti itu. Jadi dalam artikel ini, saya akan menunjukkan kepada Anda cara mengekstrak data dari faktur atau tanda terima PDF secara terprogram dalam C# menggunakan API GroupDocs.Parser for .NET.

Alur kerja untuk Mengekstrak Data dari Faktur PDF

Berikut ini adalah alur kerja cara mengekstrak data dari faktur PDF menggunakan GroupDocs.Parser for .NET.

  • Buat parameter tabel untuk mengekstrak data dari tabel.
  • Buat item template untuk mengekstrak data dari bidang.
  • Parse invoice sesuai dengan template yang diberikan.
  • Ekstrak datanya.

Faktur

Berikut adalah tangkapan layar dari contoh faktur PDF yang akan saya gunakan untuk mengekstrak data. Anda dapat mendownload invoice ini dari repositori GitHub kami.

Kode

// Buat parameter detektor untuk tabel "Detail".
TemplateTableParameters detailsTableParameters = new TemplateTableParameters(new Rectangle(new Point(35, 320), new Size(530, 55)), null);

// Buat parameter detektor untuk tabel "Ringkasan".
TemplateTableParameters summaryTableParameters = new TemplateTableParameters(new Rectangle(new Point(330, 385), new Size(220, 65)), null);

// Buat koleksi item template
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)
};

// Buat templat dokumen
Template template = new Template(templateItems);
  • Parsing faktur dan ekstrak data.
// Buat instance kelas Parser
using (Parser parser = new Parser("invoice.pdf"))
{
	// Parsing dokumen berdasarkan template
	DocumentData data = parser.ParseByTemplate(template);

	// Cetak semua data yang diekstrak
	for (int i = 0; i < data.Count; i++)
	{
		Console.Write(data[i].Name + ": ");
		// Periksa apakah bidangnya adalah tabel
		PageTableArea area = data[i].PageArea as PageTableArea;
		if (area == null)
		{
			PageArea pageArea = data[i].PageArea;
			Console.WriteLine(pageArea.ToString());
		}
		else
		{
			// Ulangi melalui baris tabel
			for (int row = 0; row < area.RowCount; row++)
			{
				// Ulangi melalui kolom tabel
				for (int column = 0; column < area.ColumnCount; column++)
				{
					// Dapatkan nilai sel
					PageTextArea cellValue = area[row, column].PageArea as PageTextArea;

					// Cetak spasi antar kolom
					if (column > 0)
					{
						Console.Write("\t");
					}

					// Cetak nilai sel
					Console.Write(cellValue == null ? "" : cellValue.Text);
				}

				// Cetak baris baru
				Console.WriteLine();
			}
		}
	}
}

Hasil

Untuk mempelajari lebih lanjut tentang GroupDocs.Parser for .NET API, kunjungi dokumentasi. Hubungi kami di forum kami jika ada pertanyaan atau pertanyaan.

Lihat juga