Рахунки-фактури та квитанції – це документи, які використовуються для запису операцій у певному форматі, коли йдеться про купівлю чи продаж послуг або товарів. Все стало цифровим, і завдяки популярності онлайн-покупок широко використовуються цифрові рахунки-фактури. Обробка кількох цифрових рахунків-фактур і отримання інформації вручну є складним і трудомістким процесом. Таким чином, вам потрібен більш швидкий, але ефективний спосіб для такого випадку. Тож у цій статті я покажу вам, як отримати дані з PDF-рахунка-фактури чи квитанції програмним шляхом у C# за допомогою API GroupDocs.Parser for .NET.

Робочий процес для вилучення даних із 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 for .NET API, відвідайте документацію. Зв’яжіться з нами на нашому форумі, якщо виникнуть запитання чи запити.

Дивись також