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ファイルに書き込むことができます。以下に操作の例を示します:
- PdfDocumentオブジェクトを作成し、PDFファイルをロードします。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("サンプル.pdf");
- PdfTableExtractorオブジェクトを作成します。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
- PdfTable配列を宣言します。
- 文書のページを反復処理し、ページから表を抽出します。
tableList = extractor.ExtractTable(pageIndex);
- 表のリストが空でないかどうかを確認し、空でない場合は、PdfTable.GetText(int rowIndex, int columnIndex) メソッドを使用して各表からセルのデータを取得し、StringBuilder に追加します。
- 処理されたデータを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ファイルから表を抽出し、ExcelおよびCSV表に変換する
PDFファイルから表を抽出した後、Free Spire.XLS for .NETを使用して抽出した表をExcelおよびCSV表として保存することもできます。Free Spire.XLS for .NETは、公式ウェブサイトからダウンロードしたり、NuGetを使用してインストールすることができます。
PM> Install-Package FreeSpire.XLS
以下に操作の例を示します:
- PdfDocumentオブジェクトを作成し、サンプルのPDFファイルをロードします。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("サンプル.pdf");
- Workbookオブジェクトを作成し、デフォルトのワークシートをクリアします。
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
- PdfTableExtractorクラスのインスタンスを初期化します。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
- PdfTable配列を宣言します。
- PDFページをループして各ページの表を抽出します。
tableList = extractor.ExtractTable(pageIndex);
- 表のリストが空でないかどうかを確認し、空でない場合は、Excelワークシートを作成し、PdfTable.GetText(int rowIndex, int columnIndex)メソッドを使用して各セルからデータを抽出し、sheet.Range[int rowIndex + 1, int columnIndex + 1].Valueプロパティを使用してデータを作成したExcelワークシートに書き込みます。
- ワークシートをcsvファイルとして保存します。
sheet.SaveToFile("output/テーブル/CSVテーブル.csv", ",", Encoding.UTF8);
- 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();
}
}
}
本記事では、無料のFree Spire.PDF for .NETとFree Spire.XLS for .NETを使用して、PDFファイルから表データを抽出し、TXTファイル、CSVファイル、Excelファイルに保存する方法について説明しました。その他の機能については、Spire.PDF for .NETのチュートリアルをご覧ください。