חשבוניות וקבלות הם המסמכים המשמשים לרישום העסקאות בפורמט מסוים כאשר מדובר בקנייה או מכירה של השירותים או הסחורה. דברים הפכו לדיגיטליים ועם הפופולריות של קניות מקוונות, נעשה שימוש נרחב בחשבוניות דיגיטליות. עיבוד מספר חשבוניות דיגיטליות וחילוץ המידע באופן ידני הוא תהליך מורכב ולוקח זמן רב. לפיכך, אתה צריך דרך מהירה יותר אך יעילה למקרה כזה. אז במאמר זה, אני הולך להראות לך כיצד לחלץ נתונים מחשבונית PDF או קבלה באופן פרוגרמטי ב-C# באמצעות GroupDocs.Parser for .NET API.

זרימת עבודה לחילוץ נתונים מחשבונית PDF

להלן זרימת העבודה כיצד לחלץ את הנתונים מחשבונית PDF באמצעות GroupDocs.Parser עבור 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 עבור .NET API, בקר בתיעוד. פנה אלינו בפורום שלנו בכל שאלה או שאלה.

ראה גם