チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.PDF for .NET»»C#:PDF ドキュメントから表を抽出する方法
2024-09-24

C#:PDF ドキュメントから表を抽出する方法

PDF は、データの共有や記録に広く使われる人気のあるドキュメント形式です。特に PDF に含まれる表のデータを抽出する必要がある場面に出くわすことがあります。例えば、請求書の PDF に保存された表の中に有用な情報があり、そのデータを分析や計算に利用したい場合です。本記事では、Spire.PDF for .NET を使用して、PDF の表からデータを抽出し、それをテキストファイルや Excel ワークシートに保存する方法を紹介します。

Spire.PDF for .NET をインストールします

まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。

PM> Install-Package Spire.PDF

C# で PDF 表データをテキストファイルに抽出する

Spire.PDF for .NET には、PdfTableExtractor.ExtractTable() メソッドがあり、PDF ページ上のすべての表を抽出することができます。このメソッドを使用して PDF ドキュメントから表を抽出した後、PdfTable.GetText() メソッドを使用して表の値を取得し、それをテキストファイルに書き出すことができます。PDF表データをテキストファイルに抽出する手順は以下の通りです:

  • PdfDocument オブジェクトを作成し、PdfDocument.LoadFromFile() メソッドで PDF ドキュメントを読み込みます。
  • 読み込んだ PDF ドキュメントに対して PdfTableExtractor オブジェクトを作成します。
  • PdfTableExtractor.ExtractTable() メソッドを使ってドキュメントの各ページにある表を抽出します。
  • 各表を順に処理します:
    • StringBuilder オブジェクトを作成し、表データを格納します。
    • 行と列をループして、Table.GetText() メソッドを使ってセルの値を取得し、それを StringBuilder オブジェクトに追加します。
    • 最終的に StringBuilder オブジェクトをテキストファイルに書き出します。
  • C#
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Text;

namespace PDFTableToText
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成し、PDFドキュメントをロード
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("Sample.pdf");

            // 読み込んだPDFのためのテーブルエクストラクターを初期化
            PdfTableExtractor tableExtractor = new PdfTableExtractor(pdf);

            // PDFの各ページを繰り返し処理
            for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
            {
                // 現在のページからテーブルを抽出
                PdfTable[] tables = tableExtractor.ExtractTable(pageIndex);
                if (tables != null)
                {
                    // 抽出された各テーブルを繰り返し処理
                    for (int tableIndex = 0; tableIndex < tables.Length; tableIndex++)
                    {
                        // StringBuilderオブジェクトを作成
                        StringBuilder stringBuilder = new StringBuilder();

                        // テーブルの各行と列を繰り返し処理
                        for (int rowIndex = 0; rowIndex < tables[tableIndex].GetRowCount(); rowIndex++)
                        {
                            for (int columnIndex = 0; columnIndex < tables[tableIndex].GetColumnCount(); columnIndex++)
                            {
                                // テーブルのセルテキストを取得し、改行を削除
                                string cellText = tables[tableIndex].GetText(rowIndex, columnIndex);
                                string text = cellText.Replace("\n", " ");
                                // StringBuilderオブジェクトにセルテキストを追加
                                if (columnIndex < tables[tableIndex].GetColumnCount() - 1)
                                {
                                    stringBuilder.Append(text + "");
                                }
                                else
                                {
                                    stringBuilder.Append(text);
                                }
                            }
                            // 各テーブル行のために行を切り替え
                            if (rowIndex < tables[tableIndex].GetRowCount() - 1)
                            {
                                stringBuilder.AppendLine();
                            }
                        }

                        // テーブル内容をテキストファイルに書き込み
                        string outputFilePath = $"output/Page{pageIndex + 1}_Table{tableIndex + 1}.txt";
                        File.WriteAllText(outputFilePath, stringBuilder.ToString());
                    }
                }
            }
        }
    }
}

C#:PDF ドキュメントから表を抽出する方法

C# で PDF 表データを Excel ファイルに抽出する

PDF 表のセルの値を上記と同様に取得し、Spire.XLS for .NET を使用して Excel ファイルに書き出すことができます。最初に Spire.XLS for .NET をインストールする必要があります:

PM> Install-Package Spire.XLS

PDF 表データを Excel ファイルに抽出する手順は以下の通りです:

  • PdfDocument オブジェクトを作成し、PdfDocument.LoadFromFile() メソッドで PDF ドキュメントを読み込みます。
  • Workbook オブジェクトを作成し、Workbook.Worksheets.Clear() メソッドでデフォルトのワークシートをクリアします。
  • 読み込んだ PDF ドキュメントに対して PdfTableExtractor オブジェクトを作成します。
  • PdfTableExtractor.ExtractTable() メソッドを使ってドキュメントの各ページにある表を抽出します。
  • 各表を順に処理します:
    • 表ごとに Workbook にワークシートを追加します。
    • 行と列をループして、Table.GetText() メソッドを使ってセルの値を取得し、Worksheet.Range[].Text プロパティを通じて対応する位置に挿入します。
    • セルの書式を設定します。
  • 最後に Workbook.SaveToFile() メソッドを使ってワークブックを保存します。
  • C#
using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.Xls;
using System.Text;

namespace PDFTableToText
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成し、PDFドキュメントをロード
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("Sample.pdf");

            // Workbookオブジェクトを作成
            Workbook workbook = new Workbook();
            // デフォルトのワークシートをクリア
            workbook.Worksheets.Clear();

            // 読み込んだPDFのためのテーブルエクストラクターを初期化
            PdfTableExtractor tableExtractor = new PdfTableExtractor(pdf);

            // PDFの各ページを繰り返し処理
            for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
            {
                // 現在のページからテーブルを抽出
                PdfTable[] tables = tableExtractor.ExtractTable(pageIndex);
                if (tables != null)
                {
                    // ページ上の各抽出されたテーブルを繰り返し処理
                    for (int tableIndex = 0; tableIndex < tables.Length; tableIndex++)
                    {
                        // ワークブックにワークシートを追加
                        Worksheet sheet = workbook.Worksheets.Add($"Page{pageIndex + 1}-Table{tableIndex + 1}");

                        // テーブル内の各行と列を繰り返し処理
                        for (int rowIndex = 0; rowIndex < tables[tableIndex].GetRowCount(); rowIndex++)
                        {
                            for (int columnIndex = 0; columnIndex < tables[tableIndex].GetColumnCount(); columnIndex++)
                            {
                                // テーブルからセルテキストを取得し、改行を削除
                                string cellText = tables[tableIndex].GetText(rowIndex, columnIndex);
                                string text = cellText.Replace("\n", "");
                                // ワークシートの対応する位置にセルテキストを挿入
                                sheet.Range[rowIndex + 1, columnIndex + 1].Text = text;
                            }
                        }

                        // テーブルヘッダのフォーマットを設定
                        sheet.Rows[0].Style.Font.FontName = "Yu Gothic UI";
                        sheet.Rows[0].Style.Font.Size = 12;
                        sheet.Rows[0].Style.Font.IsBold = true;
                        sheet.Rows[0].Style.HorizontalAlignment = HorizontalAlignType.Center;
                        // データ行のフォーマットを設定
                        for (int rowIndex = 1; rowIndex < sheet.Rows.Length; rowIndex++)
                        {
                            sheet.Rows[rowIndex].Style.Font.FontName = "Yu Gothic UI";
                            sheet.Rows[0].Style.Font.Size = 12;
                            sheet.Rows[0].Style.HorizontalAlignment = HorizontalAlignType.Left;
                        }
                        // 各列を自動調整
                        for (int columnIndex = 1; columnIndex <= sheet.Columns.Length; columnIndex++)
                        {
                            sheet.AutoFitColumn(columnIndex);
                        }
                    }
                }
            }

            // ワークブックを保存
            workbook.SaveToFile("PDFTableToExcel.xlsx", Spire.Xls.FileFormat.Version2016);
            pdf.Close();
            workbook.Dispose();
        }
    }
}

C#:PDF ドキュメントから表を抽出する方法

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Read 167 times