Faktury i paragony są dokumentami używanymi do rejestrowania transakcji w określonym formacie przy zakupie lub sprzedaży usług lub towarów. Wszystko stało się cyfrowe, a wraz z popularnością zakupów online faktury cyfrowe są szeroko stosowane. Przetwarzanie wielu faktur cyfrowych i ręczne wydobywanie informacji jest złożonym i czasochłonnym procesem. Dlatego potrzebujesz szybszego, ale wydajnego sposobu na taki przypadek. Dlatego w tym artykule pokażę, jak programowo wyodrębnić dane z faktury lub paragonu PDF w języku C# przy użyciu interfejsu API GroupDocs.Parser for .NET.

Przepływ pracy do wyodrębniania danych z faktury PDF

Poniżej przedstawiono przepływ pracy wyodrębniania danych z faktury PDF za pomocą GroupDocs.Parser for .NET.

  • Utwórz parametry tabeli do wyodrębniania danych z tabel.
  • Utwórz elementy szablonu do wyodrębniania danych z pól.
  • Przeanalizuj fakturę zgodnie z podanym szablonem.
  • Wyodrębnij dane.

Faktura

Poniżej znajduje się zrzut ekranu przykładowej faktury PDF, której użyję do wyodrębnienia danych. Możesz pobrać tę fakturę z naszego repozytorium GitHub.

Kod

// Utwórz parametry detektora dla tabeli „Szczegóły”.
TemplateTableParameters detailsTableParameters = new TemplateTableParameters(new Rectangle(new Point(35, 320), new Size(530, 55)), null);

// Utwórz parametry detektora dla tabeli „Podsumowanie”.
TemplateTableParameters summaryTableParameters = new TemplateTableParameters(new Rectangle(new Point(330, 385), new Size(220, 65)), null);

// Utwórz kolekcję elementów szablonu
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)
};

// Utwórz szablon dokumentu
Template template = new Template(templateItems);
  • Przeanalizuj fakturę i wyodrębnij dane.
// Utwórz instancję klasy Parser
using (Parser parser = new Parser("invoice.pdf"))
{
	// Przeanalizuj dokument według szablonu
	DocumentData data = parser.ParseByTemplate(template);

	// Wydrukuj wszystkie wyodrębnione dane
	for (int i = 0; i < data.Count; i++)
	{
		Console.Write(data[i].Name + ": ");
		// Sprawdź, czy pole jest tabelą
		PageTableArea area = data[i].PageArea as PageTableArea;
		if (area == null)
		{
			PageArea pageArea = data[i].PageArea;
			Console.WriteLine(pageArea.ToString());
		}
		else
		{
			// Iteruj przez wiersze tabeli
			for (int row = 0; row < area.RowCount; row++)
			{
				// Iteruj za pomocą kolumn tabeli
				for (int column = 0; column < area.ColumnCount; column++)
				{
					// Pobierz wartość komórki
					PageTextArea cellValue = area[row, column].PageArea as PageTextArea;

					// Wydrukuj odstęp między kolumnami
					if (column > 0)
					{
						Console.Write("\t");
					}

					// Wydrukuj wartość komórki
					Console.Write(cellValue == null ? "" : cellValue.Text);
				}

				// Wydrukuj nową linię
				Console.WriteLine();
			}
		}
	}
}

Wyjście

Aby dowiedzieć się więcej o GroupDocs.Parser for .NET API, odwiedź dokumentację. Skontaktuj się z nami na naszym forum w przypadku jakichkolwiek pytań lub wątpliwości.

Zobacz też