請求書および領収書は、サービスまたは商品の売買が関係する場合に、特定の形式で取引を記録するために使用される文書です。物事はデジタル化され、オンラインショッピングの人気により、デジタル請求書が広く使用されています。多数のデジタル請求書を処理し、情報を手動で抽出することは、複雑で時間のかかるプロセスです。したがって、このような場合には、より高速で効率的な方法が必要です。したがって、この記事では、** GroupDocsを使用して、PDF請求書またはC#プログラムデータを抽出する方法を紹介します。 .NETのパーサー API

PDF請求書からデータを抽出するためのワークフロー

以下は、GroupDocs.Parserfor.NETを使用してPDF請求書からデータを抽出する方法のワークフローです。

*テーブルからデータを抽出するためのテーブルパラメータを作成します。 *フィールドからデータを抽出するためのテンプレートアイテムを作成します。 *指定されたテンプレートに従って請求書を解析します。 *データを抽出します。

請求書

以下は、データの抽出に使用するサンプルPDF請求書のスクリーンショットです。この請求書は、GitHubリポジトリ からダウンロードできます。

コード

*指定された請求書のテンプレートを作成します(続きを読む テンプレートについて) 。

// 「詳細」テーブルの検出器パラメータを作成します
TemplateTableParameters detailsTableParameters = new TemplateTableParameters(new Rectangle(new Point(35, 320), new Size(530, 55)), null);

// 「概要」テーブルの検出器パラメータを作成します
TemplateTableParameters summaryTableParameters = new TemplateTableParameters(new Rectangle(new Point(330, 385), new Size(220, 65)), null);

// テンプレートアイテムのコレクションを作成する
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)
};

// ドキュメントテンプレートを作成する
Template template = new Template(templateItems);

*請求書を解析し、データを抽出します。

// パーサークラスのインスタンスを作成します
using (Parser parser = new Parser("invoice.pdf"))
{
	// テンプレートでドキュメントを解析します
	DocumentData data = parser.ParseByTemplate(template);

	// 抽出したすべてのデータを印刷する
	for (int i = 0; i < data.Count; i++)
	{
		Console.Write(data[i].Name + ": ");
		// フィールドがテーブルかどうかを確認します
		PageTableArea area = data[i].PageArea as PageTableArea;
		if (area == null)
		{
			PageArea pageArea = data[i].PageArea;
			Console.WriteLine(pageArea.ToString());
		}
		else
		{
			// テーブルの行を介して反復します
			for (int row = 0; row < area.RowCount; row++)
			{
				// テーブル列を介して反復します
				for (int column = 0; column < area.ColumnCount; column++)
				{
					// セル値を取得する
					PageTextArea cellValue = area[row, column].PageArea as PageTextArea;

					// 列間のスペースを印刷します
					if (column > 0)
					{
						Console.Write("\t");
					}

					// セル値を出力する
					Console.Write(cellValue == null ? "" : cellValue.Text);
				}

				// 改行を印刷する
				Console.WriteLine();
			}
		}
	}
}

出力

GroupDocs.Parser for .NET APIの詳細については、ドキュメント にアクセスしてください。ご質問やご質問がございましたら、フォーラム までお問い合わせください。

関連項目