Счета и квитанции — это документы, которые используются для записи транзакций в определенном формате при покупке или продаже услуг или товаров. Вещи стали цифровыми, и с ростом популярности онлайн-покупок широко используются цифровые счета. Обработка ряда цифровых счетов-фактур и извлечение информации вручную — сложный и трудоемкий процесс. Таким образом, вам нужен более быстрый, но эффективный способ для такого случая. Итак, в этой статье я собираюсь показать вам, как извлекать данные из счета-фактуры в формате PDF или квитанции программно на C# с помощью GroupDocs. Парсер для .NET API.

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

Смотрите также