Fatture e ricevute sono i documenti utilizzati per registrare le transazioni in un formato particolare quando si tratta di acquistare o vendere servizi o beni. Le cose sono diventate digitali e con la popolarità dello shopping online, le fatture digitali sono ampiamente utilizzate. L’elaborazione di una serie di fatture digitali e l’estrazione manuale delle informazioni è un processo complesso e richiede tempo. Pertanto, è necessario un modo più veloce ma efficiente per un caso del genere. Quindi, in questo articolo, ti mostrerò come estrarre dati da una fattura PDF o ricevuta a livello di codice in C# utilizzando GroupDocs. Analizzatore per .NET API.

Flusso di lavoro per l’estrazione di dati da una fattura PDF

Di seguito è riportato il flusso di lavoro su come estrarre i dati da una fattura PDF utilizzando GroupDocs.Parser per .NET.

  • Creare parametri di tabella per estrarre i dati dalle tabelle.
  • Crea elementi modello per estrarre i dati dai campi.
  • Analizza la fattura in base al modello fornito.
  • Estrarre i dati.

La fattura

Quello che segue è lo screenshot di una fattura PDF di esempio che userò per estrarre i dati. Puoi scaricare questa fattura dal nostro repository GitHub.

Il codice

  • Crea il modello per la fattura data (leggi di più sui modelli).
// Creare i parametri del rivelatore per la tabella "Dettagli".
TemplateTableParameters detailsTableParameters = new TemplateTableParameters(new Rectangle(new Point(35, 320), new Size(530, 55)), null);

// Creare i parametri del rivelatore per la tabella "Riepilogo".
TemplateTableParameters summaryTableParameters = new TemplateTableParameters(new Rectangle(new Point(330, 385), new Size(220, 65)), null);

// Crea una raccolta di elementi del modello
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)
};

// Crea un modello di documento
Template template = new Template(templateItems);
  • Analizza la fattura ed estrai i dati.
// Crea un'istanza della classe Parser
using (Parser parser = new Parser("invoice.pdf"))
{
	// Analizza il documento in base al modello
	DocumentData data = parser.ParseByTemplate(template);

	// Stampa tutti i dati estratti
	for (int i = 0; i < data.Count; i++)
	{
		Console.Write(data[i].Name + ": ");
		// Controlla se il campo è una tabella
		PageTableArea area = data[i].PageArea as PageTableArea;
		if (area == null)
		{
			PageArea pageArea = data[i].PageArea;
			Console.WriteLine(pageArea.ToString());
		}
		else
		{
			// Iterare tramite le righe della tabella
			for (int row = 0; row < area.RowCount; row++)
			{
				// Iterare tramite le colonne della tabella
				for (int column = 0; column < area.ColumnCount; column++)
				{
					// Ottieni il valore della cella
					PageTextArea cellValue = area[row, column].PageArea as PageTextArea;

					// Stampa lo spazio tra le colonne
					if (column > 0)
					{
						Console.Write("\t");
					}

					// Stampa il valore della cella
					Console.Write(cellValue == null ? "" : cellValue.Text);
				}

				// Stampa nuova riga
				Console.WriteLine();
			}
		}
	}
}

L’output

Per saperne di più sull’API GroupDocs.Parser per .NET, visitare la documentazione. Raggiungici al nostro forum in caso di domande o domande.

Guarda anche