ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
多くの業界では、PDFファイルは、レポート、請求書、データ表などの構造化されたドキュメントを共有するための一般的なフォーマットです。 しかし、PDFからデータを抽出するのは、特に表に関しては、PDFフォーマットの性質上、難しい場合があります。 構造化データ形式とは異なり、PDFはデータ抽出ではなく、主にプレゼンテーションのために設計されています。
しかしIronPDF強力な C# PDF .NET ライブラリにより、PDF から表のような構造化データを簡単に直接抽出し、.NET アプリケーションで処理することができます。 この記事ではIronPdfを使ってPDFファイルから表形式のデータを抽出する方法をステップバイステップで説明します。
テーブルは、在庫管理、データ入力、雨量などのデータの記録など、データを構造化して表示する便利な方法です。したがって、PDF文書から表や表データを抽出する必要がある理由もたくさんあるでしょう。 最も一般的な使用例には、次のようなものがあります:
PDFファイル形式は、テーブルのような構造化された形式でデータを保存するネイティブの機能を提供しません。 今日の例で使用する表は、HTMLで作成されました。PDF形式に変換. 表はテキストと行として表示されるため、表データを抽出するには、次のようなOCRソフトウェアを使用しない限り、コンテンツの解析と解釈が必要になることがよくあります。IronOCR.
IronPDFがこのタスクにどのように取り組めるかを検討する前に、まずPDF抽出を処理できるオンラインツールを検討してみましょう。 オンライン PDF ツールを使用して PDF 文書から表を抽出するには、以下の手順に従ってください:
無料のオンラインPDF抽出ツールに移動する
表を含むPDFのアップロード
本日はDocsumoオンラインPDFツールの例 Docsumoは、無料のPDF表抽出ツールを提供するオンラインPDF文書AIです。
ファイルをアップロード」ボタンをクリックして、PDFファイルをアップロードしてください。 ツールは直ちにPDFの処理を開始します。
DocsumoがPDFの処理を終えると、抽出された表が表示されます。 その後、行の追加や削除など、テーブル構造の調整を行うことができます。 ここでは、別のPDF、XLS、JSON、またはテキストとして表をダウンロードできます。
IronPDFはPDFからデータ、テキスト、グラフィックを抽出し、それを使ってプログラムで表を再構築することができます。 そのためには、まずPDFの表からテキストコンテンツを抽出し、そのテキストを使用して表を行と列に解析する必要があります。 テーブルの抽出を始める前に、IronPDFのExtractAllText().メソッドは、テーブル内のデータを抽出することで動作します:
using IronPDF;
PdfDocument pdf = PdfDocument.FromFile("example.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
using IronPDF;
PdfDocument pdf = PdfDocument.FromFile("example.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
Imports IronPDF
Private pdf As PdfDocument = PdfDocument.FromFile("example.pdf")
Private text As String = pdf.ExtractAllText()
Console.WriteLine(text)
この例では、PDFドキュメントをPdfDocumentクラスを作成し、ExtractAllText() 最終的にコンソールにテキストを表示する前に、ドキュメント内のすべてのテキストを抽出する方法。
PDFからテキストを抽出した後、表はプレーンテキストの一連の行と列として表示されます。 このテキストは、改行に基づいて分割することができます(以下の内容を日本語に翻訳してください:
\nという表現の"\n"は改行を表す記号として理解しました。では、具体的な文章を提供してください。)この翻訳では、行をカラムに分割し、カンマやタブなどの区切り文字を使用します。 以下は、テキストから表を解析する方法の基本的な例です:
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("table.pdf");
string text = pdf.ExtractAllText();
string[] lines = text.Split('\n');
foreach (string line in lines)
{
string[] columns = line.Split('\t').Where(col => !string.IsNullOrWhiteSpace(col)).ToArray();
Console.WriteLine("Row: ");
foreach (string column in columns)
{
Console.WriteLine(" " + column);
}
}
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("table.pdf");
string text = pdf.ExtractAllText();
string[] lines = text.Split('\n');
foreach (string line in lines)
{
string[] columns = line.Split('\t').Where(col => !string.IsNullOrWhiteSpace(col)).ToArray();
Console.WriteLine("Row: ");
foreach (string column in columns)
{
Console.WriteLine(" " + column);
}
}
Imports Microsoft.VisualBasic
Imports IronPdf
Private pdf As PdfDocument = PdfDocument.FromFile("table.pdf")
Private text As String = pdf.ExtractAllText()
Private lines() As String = text.Split(ControlChars.Lf)
For Each line As String In lines
Dim columns() As String = line.Split(ControlChars.Tab).Where(Function(col) Not String.IsNullOrWhiteSpace(col)).ToArray()
Console.WriteLine("Row: ")
For Each column As String In columns
Console.WriteLine(" " & column)
Next column
Next line
この例では、前回と同じ手順でPDF文書を読み込み、テキストを抽出しました。 次に、text.Splitを使用します。('\n') 抽出されたテキストを改行に基づいて行に分割し、結果を lines 配列に格納します。 foreachループは、配列の行をループするために使用されます。('\t') タブ文字 ' \t' を区切り文字として使用し、行を列に分割します。 列の配列の次の部分、どこで(コル =>!string.IsNullOrWhiteSpace(コル)).ToArray()** 余分なスペースが原因で発生する可能性のある空の列をフィルタリングし、列配列に列を追加します。
最後に、基本的な行と列の構造化を使用して、コンソール出力ウィンドウにテキストを書き込みます。
さて、PDFファイルから表を抽出する方法を説明したので、抽出したデータで何ができるかを見てみましょう。 エクスポートされた表をCSVファイルとして出力することは、表データを扱い、データ入力などの作業を自動化する便利な方法の1つです。 この例では、シミュレートされたデータ(この場合は1週間の毎日の降雨量)で表を埋め、PDFから表を抽出し、CSVファイルにエクスポートしています。
class Program
{
static void Main(string[] args)
{
string pdfPath = "table.pdf";
string csvPath = "output.csv";
// Extract and parse table data
var tableData = ExtractTableDataFromPdf(pdfPath);
// Write the extracted data to a CSV file
WriteDataToCsv(tableData, csvPath);
Console.WriteLine($"Data extracted and saved to {csvPath}");
}
static List<string[]> ExtractTableDataFromPdf(string pdfPath)
{
var pdf = PdfDocument.FromFile(pdfPath);
var text = pdf.ExtractTextFromPage(0); // Extract text from the first page
var rows = new List<string[]>();
// Split text into lines (rows)
var lines = text.Split('\n');
// Variable to hold column values temporarily
var tempColumns = new List<string>();
foreach (var line in lines)
{
var trimmedLine = line.Trim();
// Check for empty lines or lines that don't contain table data
if (string.IsNullOrEmpty(trimmedLine)
trimmedLine.Contains("Header"))
{
continue;
}
// Split line into columns. Adjust this based on how columns are separated.
var columns = trimmedLine.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
if (columns.Length > 0)
{
// Add columns to temporary list
tempColumns.AddRange(columns);
rows.Add(tempColumns.ToArray());
tempColumns.Clear(); // Clear temporary list after adding to rows
}
}
return rows;
}
static void WriteDataToCsv(List<string[]> data, string csvPath)
{
using (var writer = new StreamWriter(csvPath))
{
foreach (var row in data)
{
// Join columns with commas and quote each field to handle commas within data
var csvRow = string.Join(",", row.Select(field => $"\"{field.Replace("\"", "\"\"")}\""));
writer.WriteLine(csvRow);
}
}
}
}
class Program
{
static void Main(string[] args)
{
string pdfPath = "table.pdf";
string csvPath = "output.csv";
// Extract and parse table data
var tableData = ExtractTableDataFromPdf(pdfPath);
// Write the extracted data to a CSV file
WriteDataToCsv(tableData, csvPath);
Console.WriteLine($"Data extracted and saved to {csvPath}");
}
static List<string[]> ExtractTableDataFromPdf(string pdfPath)
{
var pdf = PdfDocument.FromFile(pdfPath);
var text = pdf.ExtractTextFromPage(0); // Extract text from the first page
var rows = new List<string[]>();
// Split text into lines (rows)
var lines = text.Split('\n');
// Variable to hold column values temporarily
var tempColumns = new List<string>();
foreach (var line in lines)
{
var trimmedLine = line.Trim();
// Check for empty lines or lines that don't contain table data
if (string.IsNullOrEmpty(trimmedLine)
trimmedLine.Contains("Header"))
{
continue;
}
// Split line into columns. Adjust this based on how columns are separated.
var columns = trimmedLine.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
if (columns.Length > 0)
{
// Add columns to temporary list
tempColumns.AddRange(columns);
rows.Add(tempColumns.ToArray());
tempColumns.Clear(); // Clear temporary list after adding to rows
}
}
return rows;
}
static void WriteDataToCsv(List<string[]> data, string csvPath)
{
using (var writer = new StreamWriter(csvPath))
{
foreach (var row in data)
{
// Join columns with commas and quote each field to handle commas within data
var csvRow = string.Join(",", row.Select(field => $"\"{field.Replace("\"", "\"\"")}\""));
writer.WriteLine(csvRow);
}
}
}
}
Imports Microsoft.VisualBasic
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim pdfPath As String = "table.pdf"
Dim csvPath As String = "output.csv"
' Extract and parse table data
Dim tableData = ExtractTableDataFromPdf(pdfPath)
' Write the extracted data to a CSV file
WriteDataToCsv(tableData, csvPath)
Console.WriteLine($"Data extracted and saved to {csvPath}")
End Sub
Private Shared Function ExtractTableDataFromPdf(ByVal pdfPath As String) As List(Of String())
Dim pdf = PdfDocument.FromFile(pdfPath)
Dim text = pdf.ExtractTextFromPage(0) ' Extract text from the first page
Dim rows = New List(Of String())()
' Split text into lines (rows)
Dim lines = text.Split(ControlChars.Lf)
' Variable to hold column values temporarily
Dim tempColumns = New List(Of String)()
For Each line In lines
Dim trimmedLine = line.Trim()
' Check for empty lines or lines that don't contain table data
If String.IsNullOrEmpty(trimmedLine) trimmedLine.Contains("Header") Then
Continue For
End If
' Split line into columns. Adjust this based on how columns are separated.
Dim columns = trimmedLine.Split( { " "c, ControlChars.Tab }, StringSplitOptions.RemoveEmptyEntries)
If columns.Length > 0 Then
' Add columns to temporary list
tempColumns.AddRange(columns)
rows.Add(tempColumns.ToArray())
tempColumns.Clear() ' Clear temporary list after adding to rows
End If
Next line
Return rows
End Function
Private Shared Sub WriteDataToCsv(ByVal data As List(Of String()), ByVal csvPath As String)
Using writer = New StreamWriter(csvPath)
For Each row In data
' Join columns with commas and quote each field to handle commas within data
Dim csvRow = String.Join(",", row.Select(Function(field) $"""{field.Replace("""", """""")}"""))
writer.WriteLine(csvRow)
Next row
End Using
End Sub
End Class
ご覧のように、PDFの表をCSVにエクスポートすることに成功しました。まず、表を含むPDFを読み込み、新しいCSVファイルのパスを作成しました。 この後、var tableData = ExtractTableDataFromPdfを使用してテーブルを抽出した。(pdfPath) これは、ExtractTableDataFromPdfと呼ばれる行です。() メソッド こ の メ ソ ッ ド は、 表が存在す る PDF ページ上のテ キ ス ト をすべて抽出 し 、 text 変数に格納 し ます。
次に、テキストを行と列に分割します。 最後に、この分割処理から結果を返した後、メソッド static void WriteDataToCsv を呼び出します。() 抽出され、分割されたテキストを取得し、StreamWriterを使用して私たちのCSVファイルに書き込みます。
PDFの表を扱う場合、いくつかの基本的なベストプラクティスに従うことで、エラーや問題に遭遇する可能性を最小限に抑えることができます。
IronPdfは様々な翻訳サービスを提供しています。ライセンスIronPDFのパワフルな機能をライセンス契約前にお試しいただけます。
を使用してPDFから表を抽出します。IronPDFは、データ抽出を自動化し、分析を促進し、ドキュメントをよりアクセスしやすい形式に変換する強力な方法です。 IronPDFは単純な表でも複雑で不規則なフォーマットでも、表データを効率的に抽出し処理するために必要なツールを提供します。
IronPdfを使えば、自動データ入力、文書変換、データ分析などのワークフローを合理化することができます。 IronPDFが提供する柔軟性と高度な機能により、PDFベースの様々なタスクを処理するための価値あるツールとなっています。
9つの .NET API製品 オフィス文書用