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のテーブルからデータを抽出する手順です。
- Documentクラスを使用してPDFドキュメントをロードします。
- Document.Pagesコレクションを使用して、PDFのページをループします。
- 各反復で、TableAbsorberオブジェクトを初期化し、TableAbsorber.Visit(Page)メソッドを使用して選択したページにアクセスします。
- ネストされたループで、TableAbsorber.TableListコレクション内のテーブルのリストを反復処理します。
- コレクション内のAbsorbedTableごとに、AbsorbedTable.RowListの行のコレクションを反復処理します。
- コレクション内のAbsorbedRowごとに、AbsorbedRow.CellList内のセルのコレクションを反復処理します。
- 最後に、各AbsorbedCellのTextFragmentsコレクションをループして、テキストを印刷します。
次のコードサンプルは、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コレクション内のテーブルのリストを反復処理します。
- テーブルがリージョン内にある場合は、次の手順を実行します。
- AbsorbedTable.RowListの行のコレクションを繰り返し処理します。
- コレクション内のAbsorbedRowごとに、AbsorbedRow.CellList内のセルのコレクションを反復処理します。
- 最後に、各AbsorbedCellのTextFragmentsコレクションをループして、テキストを印刷します。
次のコードサンプルは、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の詳細を調べることができます。また、フォーラムに質問を投稿することもできます。