3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C# .NETでPDFの表を抽出し、txt、csv、xlsxとして保存

Posted at

PDFファイルの内容を処理するのは少々面倒な作業ですが、特に表形式で表示される様々なデータはさらに面倒です。これらの貴重なデータリソースを最大限に活用するために、プログラムを使用してPDFファイルから表を抽出し、より処理しやすく分析しやすい形式(txt、csv、xlsxなど)で保存することで、表データをより簡単に処理、分析、可視化することができ、作業効率を高めることができます。本記事では、.NETプラットフォームでC#コードを使用して、無料のAPIを使用してPDFファイルから表データを抽出して保存する方法について紹介します。

本記事で使用する方法には、無料のFree Spire.PDF for .NETが必要です。公式ウェブサイトからダウンロードしたり、NuGetを使用してインストールすることができます。

PM> Install-Package FreeSpire.PDF

PDFファイルから表を抽出し、TXTおよびCSVファイルとして保存する

PDFの表データを抽出するには、主に PdfTableExtractor クラスを使用します。このクラスの ExtractTable(int pageIndex) メソッドは、任意のページのすべての表データを抽出し、表のコレクションを返します。表データを抽出した後、データを少し処理してtxtファイルに書き込むことができます。以下に操作の例を示します:

  1. PdfDocumentオブジェクトを作成し、PDFファイルをロードします。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("サンプル.pdf");
  1. PdfTableExtractorオブジェクトを作成します。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
  1. PdfTable配列を宣言します。
  2. 文書のページを反復処理し、ページから表を抽出します。
tableList = extractor.ExtractTable(pageIndex);
  1. 表のリストが空でないかどうかを確認し、空でない場合は、PdfTable.GetText(int rowIndex, int columnIndex) メソッドを使用して各表からセルのデータを取得し、StringBuilder に追加します。
  2. 処理されたデータをTXTファイルに保存し、PDFファイルを閉じます。

完全なコード例:

using System.Text;
using Spire.Pdf;
using Spire.Pdf.Utilities;

namespace ExtractPdfTable
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成し、PDFファイルをロードする
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile("Sample.pdf");

            // StringBuilderオブジェクトを作成する
            StringBuilder builder = new StringBuilder();

            // PdfTableExtractorクラスのインスタンスを初期化する
            PdfTableExtractor extractor = new PdfTableExtractor(doc);

            // PdfTable配列を宣言する
            PdfTable[]? tableList = null;

            int tableCount = 1;

            // ページをループで処理する
            for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)
            {
                // 特定のページからテーブルを抽出する
                tableList = extractor.ExtractTable(pageIndex);

                // テーブルリストが空でないか確認する
                if (tableList != null && tableList.Length > 0)
                {
                    // リスト内のテーブルをループで処理する
                    foreach (PdfTable table in tableList)
                    {
                        // 特定のテーブルの行数と列数を取得する
                        int row = table.GetRowCount();
                        int column = table.GetColumnCount();

                        // 行と列をループで処理する
                        for (int i = 0; i < row; i++)
                        {
                            for (int j = 0; j < column; j++)
                            {
                                // 特定のセルのテキストを取得する
                                string text = table.GetText(i, j);

                                // テキストをStringBuilderに追加し、タブを追加する
                                builder.Append(text + "\t");
                            }
                            builder.Append("\r\n");
                        }

                        // .txtファイルに書き込む
                        File.WriteAllText($"output/TXTテーブル/TXTテーブル_{tableCount}.txt", builder.ToString());
                        tableCount += 1;
                    }
                }
            }
            doc.Close();
        }
    }
}

PDFドキュメント
PDF表をTXTテキストファイルに抽出する

抽出した表
PDF表をTXTテキストファイルに抽出する

PDFファイルから表を抽出し、ExcelおよびCSV表に変換する

PDFファイルから表を抽出した後、Free Spire.XLS for .NETを使用して抽出した表をExcelおよびCSV表として保存することもできます。Free Spire.XLS for .NETは、公式ウェブサイトからダウンロードしたり、NuGetを使用してインストールすることができます。

PM> Install-Package FreeSpire.XLS

以下に操作の例を示します:

  1. PdfDocumentオブジェクトを作成し、サンプルのPDFファイルをロードします。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("サンプル.pdf");
  1. Workbookオブジェクトを作成し、デフォルトのワークシートをクリアします。
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
  1. PdfTableExtractorクラスのインスタンスを初期化します。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
  1. PdfTable配列を宣言します。
  2. PDFページをループして各ページの表を抽出します。
tableList = extractor.ExtractTable(pageIndex);
  1. 表のリストが空でないかどうかを確認し、空でない場合は、Excelワークシートを作成し、PdfTable.GetText(int rowIndex, int columnIndex)メソッドを使用して各セルからデータを抽出し、sheet.Range[int rowIndex + 1, int columnIndex + 1].Valueプロパティを使用してデータを作成したExcelワークシートに書き込みます。
  2. ワークシートをcsvファイルとして保存します。
sheet.SaveToFile("output/テーブル/CSVテーブル.csv", ",", Encoding.UTF8);
  1. PDFファイルとワークブックファイルを閉じます。

完全なコード例:

using System.Text;
using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.Xls;

namespace ExtractTablesToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // PdfDocumentオブジェクトを作成し、サンプルPDFファイルをロードします
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile("サンプル.pdf");

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

            // PdfTableExtractorクラスのインスタンスを初期化します
            PdfTableExtractor extractor = new PdfTableExtractor(doc);

            // PdfTableの配列を宣言します
            PdfTable[]? tableList = null;

            int sheetNumber = 1;

            // ページをループ処理します
            for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)
            {
                // 特定のページからテーブルを抽出します
                tableList = extractor.ExtractTable(pageIndex);

                // テーブルリストが空でないかを確認します
                if (tableList != null && tableList.Length > 0)
                {
                    // リスト内のテーブルをループ処理します
                    foreach (PdfTable table in tableList)
                    {
                        // ワークシートを追加します
                        Worksheet sheet = workbook.Worksheets.Add(string.Format("Table_{0}", sheetNumber));

                        // 特定のテーブルの行数と列数を取得します
                        int row = table.GetRowCount();
                        int column = table.GetColumnCount();

                        // 行と列をループ処理します
                        for (int i = 0; i < row; i++)
                        {
                            for (int j = 0; j < column; j++)
                            {
                                // 特定のセルからテキストを取得します
                                string text = table.GetText(i, j);

                                // テキストを指定されたセルに書き込みます
                                sheet.Range[i + 1, j + 1].Value = text;
                            }
                        }
                        sheetNumber++;
                    }
                }
            }

            // Excelブックとして保存します
            workbook.SaveToFile("output/テーブル/Excelテーブル.xlsx", ExcelVersion.Version2013);
            doc.Close();
            workbook.Dispose();
        }
    }
}

出力ファイル:
PDF表をExcelまたはCSV表に抽出する

本記事では、無料のFree Spire.PDF for .NETとFree Spire.XLS for .NETを使用して、PDFファイルから表データを抽出し、TXTファイル、CSVファイル、Excelファイルに保存する方法について説明しました。その他の機能については、Spire.PDF for .NETのチュートリアルをご覧ください。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?