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.