Facturen en kwitanties zijn de documenten die worden gebruikt om de transacties in een bepaald formaat vast te leggen wanneer het gaat om het kopen of verkopen van de diensten of goederen. Dingen zijn digitaal geworden en met de populariteit van online winkelen worden digitale facturen veel gebruikt. Het verwerken van een aantal digitale facturen en het handmatig extraheren van de informatie is een complex en tijdrovend proces. U hebt dus een snellere maar efficiënte manier nodig voor een dergelijk geval. Dus in dit artikel laat ik je zien hoe je gegevens uit een pdf-factuur of ontvangstbewijs programmatisch kunt extraheren in C# met behulp van de GroupDocs.Parser for .NET API.

Workflow voor het extraheren van gegevens uit een PDF-factuur

Hieronder volgt de workflow voor het extraheren van de gegevens uit een PDF-factuur met behulp van GroupDocs.Parser for .NET.

  • Maak tabelparameters voor het extraheren van gegevens uit de tabellen.
  • Maak sjabloonitems voor het extraheren van gegevens uit velden.
  • Parseer de factuur volgens het opgegeven sjabloon.
  • Extraheer de gegevens.

De factuur

Het volgende is de schermafbeelding van een voorbeeld van een PDF-factuur die ik zal gebruiken voor het extraheren van de gegevens. U kunt deze factuur downloaden van onze GitHub-repository.

De code

  • Maak het sjabloon voor de gegeven factuur (lees meer over sjablonen).
// Maak detectorparameters voor de tabel "Details".
TemplateTableParameters detailsTableParameters = new TemplateTableParameters(new Rectangle(new Point(35, 320), new Size(530, 55)), null);

// Maak detectorparameters voor de tabel "Samenvatting".
TemplateTableParameters summaryTableParameters = new TemplateTableParameters(new Rectangle(new Point(330, 385), new Size(220, 65)), null);

// Maak een verzameling sjabloonitems
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)
};

// Maak een documentsjabloon
Template template = new Template(templateItems);
  • Parseer de factuur en extraheer gegevens.
// Maak een instantie van de klasse Parser
using (Parser parser = new Parser("invoice.pdf"))
{
	// Parseer het document aan de hand van de sjabloon
	DocumentData data = parser.ParseByTemplate(template);

	// Druk alle geëxtraheerde gegevens af
	for (int i = 0; i < data.Count; i++)
	{
		Console.Write(data[i].Name + ": ");
		// Controleer of het veld een tabel is
		PageTableArea area = data[i].PageArea as PageTableArea;
		if (area == null)
		{
			PageArea pageArea = data[i].PageArea;
			Console.WriteLine(pageArea.ToString());
		}
		else
		{
			// Herhaal via tabelrijen
			for (int row = 0; row < area.RowCount; row++)
			{
				// Herhaal via tabelkolommen
				for (int column = 0; column < area.ColumnCount; column++)
				{
					// Verkrijg de celwaarde
					PageTextArea cellValue = area[row, column].PageArea as PageTextArea;

					// Druk de ruimte tussen de kolommen af
					if (column > 0)
					{
						Console.Write("\t");
					}

					// Druk de celwaarde af
					Console.Write(cellValue == null ? "" : cellValue.Text);
				}

				// Nieuwe regel afdrukken
				Console.WriteLine();
			}
		}
	}
}

Het resultaat

Ga voor meer informatie over GroupDocs.Parser for .NET API naar de documentatie. Bereik ons op ons forum in geval van vragen of vragen.

Zie ook