PDFテーブルを抽出する

PDFは、多くの分野で最も広く使用されているドキュメント形式の1つになっています。さまざまな場合に、データが表形式で表示される請求書を生成するために使用されます。このような場合、プログラムでテーブルからデータを読み取るためにPDFを解析する必要がある場合があります。これを実現するために、この記事では、C#を使用してPDFテーブルからデータを抽出する方法について説明します。

PDFからテーブルを抽出するC#API

PDFファイルのテーブルからデータを抽出するために、Aspose.PDF for .NETを使用します。これは、幅広いPDF操作機能を提供する強力なAPIです。 APIをダウンロードするか、NuGetを使用してインストールできます。

PM> Install-Package Aspose.PDF

C#でPDFテーブルからデータを抽出する

以下は、C#を使用してPDFのテーブルからデータを抽出する手順です。

次のコードサンプルは、C#でPDFテーブルからテキストを抽出する方法を示しています。

// ソースPDFドキュメントをロード
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// ページをループする                      
foreach (var page in pdfDocument.Pages)
{
	// テーブルアブソーバーを作成し、ページにアクセスします
	Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
	absorber.Visit(page);
	
	// 吸収された各テーブルをループします 
	foreach (AbsorbedTable table in absorber.TableList)
	{
		Console.WriteLine("Table");
		
		// テーブルの各行をループします
		foreach (AbsorbedRow row in table.RowList)
		{
			// 行の各セルをループします
			foreach (AbsorbedCell cell in row.CellList)
			{       
				// テキストフラグメントをループします
				foreach (TextFragment fragment in cell.TextFragments)
				{
					var sb = new StringBuilder();
					foreach (TextSegment seg in fragment.Segments)
						sb.Append(seg.Text);
					Console.Write($"{sb.ToString()}|");
				}                           
			}
			Console.WriteLine();
		}
	}
}

ページの特定の領域からテーブルを抽出する

以下は、C#を使用してPDFのページの特定の部分からテーブルを抽出する手順です。

  • Documentクラスを使用してPDFドキュメントをロードします。
  • Document.Pagesコレクションから目的のPageを選択します。
  • ページのSquareアノテーションを抽出します。
  • TableAbsorberオブジェクトを初期化し、TableAbsorber.Visit(Page)メソッドを使用してページにアクセスします。
  • ネストされたループで、TableAbsorber.TableListコレクション内のテーブルのリストを反復処理します。
  • テーブルがリージョン内にある場合は、次の手順を実行します。

次のコードサンプルは、PDFページの特定の領域からテーブルを抽出する方法を示しています。

// ソースPDFドキュメントをロード
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// ページを選択し、その正方形の注釈を抽出します
var page = pdfDocument.Pages[1];
var squareAnnotation =
	page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
	as Annotations.SquareAnnotation;

// テーブルアブソーバーを作成し、ページにアクセスします
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);

// リスト内の吸収された各テーブルをループします 
foreach (AbsorbedTable table in absorber.TableList)
{
	var isInRegion = (squareAnnotation.Rect.LLX < table.Rectangle.LLX) &&
	(squareAnnotation.Rect.LLY < table.Rectangle.LLY) &&
	(squareAnnotation.Rect.URX > table.Rectangle.URX) &&
	(squareAnnotation.Rect.URY > table.Rectangle.URY);

	if (isInRegion)
	{
		// テーブルの各行をループします
		foreach (AbsorbedRow row in table.RowList)
		{
			// 行の各セルをループします
			foreach (AbsorbedCell cell in row.CellList)
			{
				// テキストフラグメントをループして、テキストを印刷します
				foreach (TextFragment fragment in cell.TextFragments)
				{
					var sb = new StringBuilder();
					foreach (TextSegment seg in fragment.Segments)
					{
						sb.Append(seg.Text);
					}
					var text = sb.ToString();
					Console.Write($"{text}|");
				}
			}
			Console.WriteLine();
		}
	}
}

無料ライセンスを取得する

一時ライセンスを使用すると、評価の制限なしにAspose.PDF for .NETを使用できます。

結論

この記事では、C#を使用してPDFのテーブルからデータを抽出する方法を学習しました。さらに、PDFのページの特定の領域からテーブルを抽出する方法を見てきました。 ドキュメントを使用して、C#PDFAPIの詳細を調べることができます。また、フォーラムに質問を投稿することもできます。

関連項目