فاکتورها و رسیدها اسنادی هستند که هنگام خرید یا فروش خدمات یا کالاها برای ثبت معاملات در قالب خاصی استفاده می شوند. همه چیز دیجیتالی شده است و با محبوبیت خرید آنلاین، فاکتورهای دیجیتال به طور گسترده ای مورد استفاده قرار می گیرند. پردازش تعدادی از فاکتورهای دیجیتال و استخراج اطلاعات به صورت دستی یک فرآیند پیچیده و همچنین زمان بر است. بنابراین، برای چنین موردی به یک راه سریعتر و در عین حال کارآمد نیاز دارید. بنابراین در این مقاله، من به شما نشان می‌دهم که چگونه با استفاده از GroupDocs.Parser for .NET API داده‌ها را از فاکتور PDF یا رسید به‌صورت برنامه‌نویسی در C# استخراج کنید.

گردش کار برای استخراج داده ها از فاکتور PDF

در زیر روند کار نحوه استخراج داده ها از فاکتور PDF با استفاده از GroupDocs.Parser for .NET ارائه شده است.

  • ایجاد پارامترهای جدول برای استخراج داده ها از جداول.
  • موارد الگو برای استخراج داده ها از فیلدها ایجاد کنید.
  • فاکتور را مطابق با الگوی داده شده تجزیه کنید.
  • داده ها را استخراج کنید.

فاکتور

تصویر زیر اسکرین شات نمونه فاکتور PDF است که برای استخراج داده ها استفاده خواهم کرد. می توانید این فاکتور را از مخزن GitHub ما دانلود کنید.

کد

// ایجاد پارامترهای آشکارساز برای جدول "جزئیات".
TemplateTableParameters detailsTableParameters = new TemplateTableParameters(new Rectangle(new Point(35, 320), new Size(530, 55)), null);

// ایجاد پارامترهای آشکارساز برای جدول "خلاصه".
TemplateTableParameters summaryTableParameters = new TemplateTableParameters(new Rectangle(new Point(330, 385), new Size(220, 65)), null);

// مجموعه ای از آیتم های قالب ایجاد کنید
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)
};

// یک الگوی سند ایجاد کنید
Template template = new Template(templateItems);
  • فاکتور را تجزیه و اطلاعات را استخراج کنید.
// یک نمونه از کلاس Parser ایجاد کنید
using (Parser parser = new Parser("invoice.pdf"))
{
	// سند را بر اساس الگو تجزیه کنید
	DocumentData data = parser.ParseByTemplate(template);

	// تمام داده های استخراج شده را چاپ کنید
	for (int i = 0; i < data.Count; i++)
	{
		Console.Write(data[i].Name + ": ");
		// بررسی کنید که آیا فیلد یک جدول است
		PageTableArea area = data[i].PageArea as PageTableArea;
		if (area == null)
		{
			PageArea pageArea = data[i].PageArea;
			Console.WriteLine(pageArea.ToString());
		}
		else
		{
			// تکرار از طریق ردیف های جدول
			for (int row = 0; row < area.RowCount; row++)
			{
				// تکرار از طریق ستون های جدول
				for (int column = 0; column < area.ColumnCount; column++)
				{
					// مقدار سلول را دریافت کنید
					PageTextArea cellValue = area[row, column].PageArea as PageTextArea;

					// فاصله بین ستون ها را چاپ کنید
					if (column > 0)
					{
						Console.Write("\t");
					}

					// مقدار سلول را چاپ کنید
					Console.Write(cellValue == null ? "" : cellValue.Text);
				}

				// چاپ خط جدید
				Console.WriteLine();
			}
		}
	}
}

خروجی

برای کاوش بیشتر درباره GroupDocs.Parser برای API .NET، از مستندات دیدن کنید. در صورت هر گونه سوال یا پرس و جو با ما در تالار گفتمان تماس بگیرید.

همچنین ببینید