Faktury a účtenky jsou dokumenty, které se používají k zaznamenání transakcí v určitém formátu, když se jedná o nákup nebo prodej služeb nebo zboží. Věci přešly do digitální podoby as popularitou online nakupování se digitální faktury široce používají. Zpracování řady digitálních faktur a ruční získávání informací je složitý a časově náročný proces. V takovém případě tedy potřebujete rychlejší, ale efektivnější způsob. V tomto článku vám tedy ukážu, jak extrahovat data z faktury nebo účtenky PDF programově v C# pomocí GroupDocs.Parser for .NET API.

Pracovní postup pro extrahování dat z faktury PDF

Následuje pracovní postup, jak extrahovat data z faktury PDF pomocí GroupDocs.Parser for .NET.

  • Vytvořte parametry tabulky pro extrahování dat z tabulek.
  • Vytvořte položky šablony pro extrahování dat z polí.
  • Rozložte fakturu podle zadané šablony.
  • Extrahujte data.

Faktura

Následuje snímek obrazovky vzorové faktury ve formátu PDF, kterou použiji k extrakci dat. Tuto fakturu si můžete stáhnout z našeho úložiště GitHub.

Kód

  • Vytvořte šablonu pro danou fakturu (číst dále o šablonách).
// Vytvořte parametry detektoru pro tabulku "Detaily".
TemplateTableParameters detailsTableParameters = new TemplateTableParameters(new Rectangle(new Point(35, 320), new Size(530, 55)), null);

// Vytvořte parametry detektoru pro tabulku "Souhrn".
TemplateTableParameters summaryTableParameters = new TemplateTableParameters(new Rectangle(new Point(330, 385), new Size(220, 65)), null);

// Vytvořte kolekci položek šablony
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)
};

// Vytvořte šablonu dokumentu
Template template = new Template(templateItems);
  • Analyzujte fakturu a extrahujte data.
// Vytvořte instanci třídy Parser
using (Parser parser = new Parser("invoice.pdf"))
{
	// Analyzujte dokument podle šablony
	DocumentData data = parser.ParseByTemplate(template);

	// Vytiskněte všechna extrahovaná data
	for (int i = 0; i < data.Count; i++)
	{
		Console.Write(data[i].Name + ": ");
		// Zkontrolujte, zda je pole tabulkou
		PageTableArea area = data[i].PageArea as PageTableArea;
		if (area == null)
		{
			PageArea pageArea = data[i].PageArea;
			Console.WriteLine(pageArea.ToString());
		}
		else
		{
			// Iterujte přes řádky tabulky
			for (int row = 0; row < area.RowCount; row++)
			{
				// Iterujte pomocí sloupců tabulky
				for (int column = 0; column < area.ColumnCount; column++)
				{
					// Získejte hodnotu buňky
					PageTextArea cellValue = area[row, column].PageArea as PageTextArea;

					// Vytiskněte mezeru mezi sloupci
					if (column > 0)
					{
						Console.Write("\t");
					}

					// Vytiskněte hodnotu buňky
					Console.Write(cellValue == null ? "" : cellValue.Text);
				}

				// Vytisknout nový řádek
				Console.WriteLine();
			}
		}
	}
}

Výstup

Chcete-li prozkoumat více o GroupDocs.Parser for .NET API, navštivte dokumentaci. V případě jakýchkoliv dotazů nebo dotazů nás kontaktujte na našem fóru.

Viz také