Rechnungen und Belege sind die Dokumente, die verwendet werden, um die Transaktionen in einem bestimmten Format aufzuzeichnen, wenn es um den Kauf oder Verkauf von Dienstleistungen oder Waren geht. Die Dinge sind digital geworden und mit der Popularität des Online-Shoppings sind digitale Rechnungen weit verbreitet. Die Verarbeitung einer Reihe digitaler Rechnungen und das manuelle Extrahieren der Informationen ist ein komplexer und zeitaufwändiger Prozess. Daher benötigen Sie für einen solchen Fall einen schnelleren und dennoch effizienten Weg. In diesem Artikel zeige ich Ihnen, wie Sie Daten aus einer PDF-Rechnung oder Quittung programmgesteuert in C# mithilfe von GroupDocs. Parser für .NET API.

Workflow zum Extrahieren von Daten aus einer PDF-Rechnung

Im Folgenden finden Sie den Arbeitsablauf zum Extrahieren der Daten aus einer PDF-Rechnung mit GroupDocs.Parser für .NET.

  • Erstellen Sie Tabellenparameter zum Extrahieren von Daten aus den Tabellen.
  • Erstellen Sie Vorlagenelemente zum Extrahieren von Daten aus Feldern.
  • Analysieren Sie die Rechnung gemäß der angegebenen Vorlage.
  • Extrahieren Sie die Daten.

Die Rechnung

Das Folgende ist der Screenshot einer Beispiel-PDF-Rechnung, die ich zum Extrahieren der Daten verwende. Sie können diese Rechnung aus unserem GitHub-Repository herunterladen.

Der Code

  • Erstellen Sie die Vorlage für die angegebene Rechnung (weiterlesen über Vorlagen).
// Erstellen Sie Detektorparameter für die Tabelle "Details".
TemplateTableParameters detailsTableParameters = new TemplateTableParameters(new Rectangle(new Point(35, 320), new Size(530, 55)), null);

// Erstellen Sie Detektorparameter für die Tabelle "Zusammenfassung".
TemplateTableParameters summaryTableParameters = new TemplateTableParameters(new Rectangle(new Point(330, 385), new Size(220, 65)), null);

// Erstellen Sie eine Sammlung von Vorlagenelementen
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)
};

// Erstellen Sie eine Dokumentvorlage
Template template = new Template(templateItems);
  • Analysieren Sie die Rechnung und extrahieren Sie Daten.
// Erstellen Sie eine Instanz der Parser-Klasse
using (Parser parser = new Parser("invoice.pdf"))
{
	// Analysieren Sie das Dokument anhand der Vorlage
	DocumentData data = parser.ParseByTemplate(template);

	// Drucken Sie alle extrahierten Daten
	for (int i = 0; i < data.Count; i++)
	{
		Console.Write(data[i].Name + ": ");
		// Überprüfen Sie, ob das Feld eine Tabelle ist
		PageTableArea area = data[i].PageArea as PageTableArea;
		if (area == null)
		{
			PageArea pageArea = data[i].PageArea;
			Console.WriteLine(pageArea.ToString());
		}
		else
		{
			// Iterieren Sie über Tabellenzeilen
			for (int row = 0; row < area.RowCount; row++)
			{
				// Über Tabellenspalten iterieren
				for (int column = 0; column < area.ColumnCount; column++)
				{
					// Holen Sie sich den Zellenwert
					PageTextArea cellValue = area[row, column].PageArea as PageTextArea;

					// Drucken Sie den Abstand zwischen den Spalten
					if (column > 0)
					{
						Console.Write("\t");
					}

					// Drucken Sie den Zellenwert
					Console.Write(cellValue == null ? "" : cellValue.Text);
				}

				// Neue Zeile drucken
				Console.WriteLine();
			}
		}
	}
}

Die Ausgabe

Um mehr über GroupDocs.Parser for .NET API zu erfahren, besuchen Sie die Dokumentation. Bei Fragen oder Unklarheiten erreichen Sie uns in unserem Forum.

Siehe auch