الفواتير والإيصالات هي المستندات التي تُستخدم لتسجيل المعاملات بتنسيق معين عند شراء أو بيع الخدمات أو السلع. أصبحت الأمور رقمية ومع انتشار التسوق عبر الإنترنت ، تم استخدام الفواتير الرقمية على نطاق واسع. تعد معالجة عدد من الفواتير الرقمية واستخراج المعلومات يدويًا عملية معقدة وتستغرق وقتًا طويلاً. وبالتالي ، فأنت بحاجة إلى طريقة أسرع وفعالة لمثل هذه الحالة. لذلك في هذه المقالة ، سأوضح لك كيفية استخراج البيانات من فاتورة PDF أو إيصال برمجيًا في C # باستخدام [GroupDocs.Parser for .NET] (https://products.groupdocs.com/parser/net) API.

سير العمل لاستخراج البيانات من فاتورة PDF

فيما يلي سير العمل الخاص بكيفية استخراج البيانات من فاتورة PDF باستخدام GroupDocs.Parser for .NET.

  • إنشاء معلمات الجدول لاستخراج البيانات من الجداول.
  • إنشاء عناصر قالب لاستخراج البيانات من الحقول.
  • قم بتحليل الفاتورة وفقًا للقالب المحدد.
  • استخرج البيانات.

الفاتورة

فيما يلي لقطة شاشة لنموذج فاتورة PDF سأستخدمها لاستخراج البيانات. يمكنك تنزيل هذه الفاتورة من [مستودع GitHub] (https://github.com/groupdocs-parser).

الرمز

// إنشاء معلمات الكاشف لجدول "التفاصيل"
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);
  • تحليل الفاتورة واستخراج البيانات.
// إنشاء مثيل لفئة المحلل اللغوي
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 لـ .NET API ، تفضل بزيارة [الوثائق] (https://docs.groupdocs.com/display/parsernet/Introducing+GroupDocs.Parser+for+.NET). تواصل معنا على [المنتدى] (https://forum.groupdocs.com/c/parser) في حالة وجود أي أسئلة أو استفسارات.

أنظر أيضا