IRONPDFの使用 C#でPDFファイルからテーブルデータを抽出する方法 Curtis Chau 更新日:6月 22, 2025 Download IronPDF NuGet Download テキストの検索と置換 テキストと画像のスタンプ Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 多くの業界では、PDFファイルはレポート、請求書、データテーブルなどの構造化文書を共有するための標準フォーマットです。 しかし、特にテーブルに関しては、PDFからデータを抽出するのはPDFフォーマットの特性上、難しい場合があります。 構造化データフォーマットとは異なり、PDFは主にプレゼンテーション用に設計されており、データ抽出のためではありません。 しかし、IronPDF(強力なC# PDF .NETライブラリ)を使用すれば、PDFからテーブルのような構造化データを簡単に抽出し、.NETアプリケーションで処理することができます。 この記事では、IronPDFを使用してPDFファイルからテーブルデータを抽出する方法をステップバイステップでガイドします。 PDFドキュメントからテーブルを抽出する必要があるのはいつですか? テーブルは在庫管理、データ入力、降水量の記録など、データを構造化して表示するのに便利な方法です。このため、PDFドキュメントからテーブルやテーブルデータを抽出する必要がある理由も多くあります。 最も一般的な使用例のいくつかを以下に示します: データ入力の自動化: PDFのレポートや請求書内のテーブルからデータを抽出することで、データベースやスプレッドシートの入力を自動化できます。 データ分析: 企業はPDFフォーマットで構造化されたレポートを受け取ることがよくあります。 テーブルを抽出すると、このデータをプログラムで分析できます。 文書変換: テーブルデータをExcelやCSVのようなよりアクセスしやすいフォーマットに抽出することで、データの操作、保存、共有が容易になります。 監査およびコンプライアンス: 法的または財務記録のために、PDFドキュメントからプログラムでテーブルデータを抽出することで、監査の自動化やコンプライアンスの確保に役立ちます。 PDFのテーブルはどのように機能しますか? PDFファイルフォーマットでは、テーブルのような構造化された形式でデータを保存するネイティブな機能は提供されていません。 今日の例で使用するテーブルは、HTMLで作成された後、PDFフォーマットに変換されました。 テーブルはテキストと線としてレンダリングされるため、OCRソフトウェア(IronOCRなど)を使用しない限り、テーブルデータの抽出には内容の解析と解釈がしばしば必要です。 C&#でPDFファイルからテーブルデータを抽出する方法 このタスクをIronPDFで解決する方法を探る前に、PDF抽出を扱えるオンラインツールをまず探ってみましょう。 オンラインのPDFツールを使用してPDFドキュメントからテーブルを抽出するには、以下の手順に従います: 無料のオンラインPDF抽出ツールにアクセスする テーブルを含むPDFをアップロードする 結果を表示してダウンロードする ステップ1: 無料のオンラインPDF抽出ツールにアクセスする 今日は、オンラインPDFツールの例としてDocsumoを使用します。 Docsumoは無料のPDFテーブル抽出ツールを提供するオンラインPDFドキュメントAIです。 ステップ2: テーブルを含むPDFをアップロードする 次に、「ファイルをアップロード」ボタンをクリックして、PDFファイルをアップロードして抽出します。 ツールは、PDFの処理を即座に開始します。 ステップ3: 結果を表示してダウンロードする DocsumoがPDFの処理を終えると、抽出されたテーブルが表示されます。 ここで、行の追加や削除などのテーブルの構造に調整を加えることができます。 ここで、テーブルを別のPDF、XLS、JSON、またはTextとしてダウンロードできます。 IronPDFを使用したテーブルデータの抽出 IronPDFを使用すると、PDFからデータ、テキスト、グラフィックスを抽出し、それをプログラムでテーブルとして再構築することができます。 これを行うには、まずPDF内のテーブルからのテキストコンテンツを抽出し、そのテキストを使用してテーブルを行と列に解析する必要があります。 テーブルを抽出し始める前に、テーブル内のデータを抽出するIronPDFのExtractAllText()メソッドの動作を見てみましょう: using IronPDF; class Program { static void Main(string[] args) { // Load the PDF document PdfDocument pdf = PdfDocument.FromFile("example.pdf"); // Extract all text from the PDF string text = pdf.ExtractAllText(); // Output the extracted text to the console Console.WriteLine(text); } } using IronPDF; class Program { static void Main(string[] args) { // Load the PDF document PdfDocument pdf = PdfDocument.FromFile("example.pdf"); // Extract all text from the PDF string text = pdf.ExtractAllText(); // Output the extracted text to the console Console.WriteLine(text); } } Imports IronPDF Friend Class Program Shared Sub Main(ByVal args() As String) ' Load the PDF document Dim pdf As PdfDocument = PdfDocument.FromFile("example.pdf") ' Extract all text from the PDF Dim text As String = pdf.ExtractAllText() ' Output the extracted text to the console Console.WriteLine(text) End Sub End Class $vbLabelText $csharpLabel この例では、まずPdfDocumentクラスを使用してPDFドキュメントを読み込み、次にExtractAllText()メソッドを使用して文書内のすべてのテキストを抽出し、最後にコンソールにテキストを表示します。 IronPDFを使用したテキストからのテーブルデータの抽出 PDFからテキストを抽出した後、テーブルはプレーンテキストの一連の行と列として表示されます。 このテキストを行の区切り(\n)に基づいて分割し、さらに列に分割するには、一貫したスペースまたはカンマやタブなどの区切り文字を使用します。 テキストからテーブルを解析する基本的な例を以下に示します: using IronPDF; using System; using System.Linq; class Program { static void Main(string[] args) { // Load the PDF document PdfDocument pdf = PdfDocument.FromFile("table.pdf"); // Extract all text from the PDF string text = pdf.ExtractAllText(); // Split the text into lines (rows) string[] lines = text.Split('\n'); foreach (string line in lines) { // Split the line into columns using the tab character string[] columns = line.Split('\t').Where(col => !string.IsNullOrWhiteSpace(col)).ToArray(); Console.WriteLine("Row:"); foreach (string column in columns) { Console.WriteLine(" " + column); // Output each column in the row } } } } using IronPDF; using System; using System.Linq; class Program { static void Main(string[] args) { // Load the PDF document PdfDocument pdf = PdfDocument.FromFile("table.pdf"); // Extract all text from the PDF string text = pdf.ExtractAllText(); // Split the text into lines (rows) string[] lines = text.Split('\n'); foreach (string line in lines) { // Split the line into columns using the tab character string[] columns = line.Split('\t').Where(col => !string.IsNullOrWhiteSpace(col)).ToArray(); Console.WriteLine("Row:"); foreach (string column in columns) { Console.WriteLine(" " + column); // Output each column in the row } } } } Imports Microsoft.VisualBasic Imports IronPDF Imports System Imports System.Linq Friend Class Program Shared Sub Main(ByVal args() As String) ' Load the PDF document Dim pdf As PdfDocument = PdfDocument.FromFile("table.pdf") ' Extract all text from the PDF Dim text As String = pdf.ExtractAllText() ' Split the text into lines (rows) Dim lines() As String = text.Split(ControlChars.Lf) For Each line As String In lines ' Split the line into columns using the tab character 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) ' Output each column in the row Next column Next line End Sub End Class $vbLabelText $csharpLabel この例では、PDFドキュメントを読み込み、テキストを抽出するために、前述と同じ手順に従いました。 次に、抽出したテキストをline breaks(改行)に基づいて行に分割し、結果をlines配列に保管します。 foreachループを使用して配列内の行をループし、line.Split('\t')を使用してタブ文字'\t'を区切りにして行をさらに列に分割します。 columns配列の次の部分であるWhere(col => !string.IsNullOrWhiteSpace(col)).ToArray()は、余分なスペースにより生じる空の列をフィルタリングし、列を配列に追加します。 最後に、基本的な行と列の構造でテキストをコンソール出力ウィンドウに書き込みます。 抽出されたテーブルデータのCSVへのエクスポート PDFファイルからテーブルを抽出することをカバーしたので、その抽出されたデータで何ができるかを見てみましょう。 テーブルをCSVファイルとしてエクスポートすることは、データ入力のようなタスクを自動化し、このようなテーブルデータを処理するための便利な方法です。 この例で、テーブルにはシミュレートされたデータを入れ、今回は一週間の毎日の降水量を、PDFから抽出し、CSVファイルにエクスポートしました。 using System; using System.Collections.Generic; using System.IO; using System.Linq; using IronPDF; 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); // Extract text from the first page var text = pdf.ExtractTextFromPage(0); 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); } } } } using System; using System.Collections.Generic; using System.IO; using System.Linq; using IronPDF; 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); // Extract text from the first page var text = pdf.ExtractTextFromPage(0); 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 Imports System Imports System.Collections.Generic Imports System.IO Imports System.Linq Imports IronPDF 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) ' Extract text from the first page Dim text = pdf.ExtractTextFromPage(0) 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) OrElse 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 $vbLabelText $csharpLabel サンプルPDFファイル 出力CSVファイル ご覧の通り、我々はPDFテーブルをCSVに正常にエクスポートしました。まず、テーブルを含むPDFをロードし、新しいCSVファイルパスを作成しました。 この後、var tableData = ExtractTableDataFromPdf(pdfPath)行を使用してテーブルを抽出しました。これはExtractTableDataFromPdf()メソッドと呼ばれます。 このメソッドは、テーブルが存在するPDFページ上のすべてのテキストを抽出し、それをtext変数に格納します。 その後、テキストを行と列に分割しました。 最終的に、この分割プロセスからの結果を返した後、抽出し分割したテキストを取って、それをStreamWriterを使用してCSVファイルに書き込むstatic void WriteDataToCsv()メソッドを呼び出します。 ヒントとベストプラクティス PDFテーブルを使用する際には、いくつかの基本的なベストプラクティスを守ることで、エラーや問題に遭遇する可能性を最小限に抑えることができます。 PDFの前処理: 可能であれば、PDFを前処理して一貫したフォーマットを保証することで抽出プロセスを簡素化します。 データの検証: 常に抽出されたデータを検証して、正確性と完全性を確保します。 エラーの処理: テキスト抽出や解析が失敗した場合に備えて、try-catchブロックでコードをラップするなど、エラーハンドリングを実装します。 パフォーマンスの最適化: 大規模なPDFの場合、パフォーマンス問題を扱うためにテキスト抽出と解析を最適化することを検討します。 IronPDFのライセンス IronPDFは異なるライセンスオプションを提供しており、ライセンスを決定する前にIronPDFが提供するすべての強力な機能を試すことができます。 結論 IronPDFを使用してPDFからテーブルを抽出することは、データの抽出を自動化し、分析を容易にし、ドキュメントをよりアクセスしやすい形式に変換する強力な方法です。 単純なテーブルから複雑で不規則な形式に至るまで、IronPDFはテーブルデータを効率的に抽出し処理するために必要なツールを提供します。 IronPDFを使用することで、自動データ入力、ドキュメント変換、データ分析などのワークフローを合理化できます。 IronPDFが提供する柔軟性と高度な機能は、様々なPDFベースのタスクを処理するための貴重なツールとなります。 よくある質問 C#を使用してPDFからテーブルを抽出する方法は? C#でPDFからテーブルを抽出するにはIronPDFを使用できます。IronPDFを使用してPDFドキュメントを読み込み、テキストを抽出し、そのテキストをプログラムで行と列に解析します。 なぜPDFドキュメントからテーブルデータを抽出するのは難しいのですか? PDFは主にデータ構造ではなくプレゼンテーション向けに設計されているため、テーブルのような構造化データの抽出が難しいのです。IronPDFのようなツールは、このデータを効果적으로解釈し抽出するのに役立ちます。 PDFからテーブルを抽出することの利点は何ですか? PDFからテーブルを抽出することにより、データ入力の自動化、データ分析の実施、よりアクセスしやすいフォーマットへのドキュメント変換、監査プロセスでのコンプライアンスの確保が容易になります。 PDF抽出で複雑なテーブル形式をどのように処理しますか? IronPDFは、複雑かつ不規則なテーブル形式からでもテーブルデータを抽出し処理する機能を提供し、正確なデータ抽出を保証します。 抽出したPDFテーブルデータをCSVに変換するプロセスは何ですか? IronPDFを使用してPDFのテーブルデータを抽出し解析した後、StreamWriterを使って解析したデータを書き込むことにより、このデータをCSVファイルにエクスポートできます。 PDFテーブル抽出のベストプラクティスは何ですか? 一貫したフォーマットに向けてPDFを事前処理し、抽出されたデータを検証し、エラー処理を実装し、大規模なPDFファイルを扱う際にはパフォーマンスを最適化します。 IronPDFは監査およびコンプライアンスタスクに役立ちますか? はい、IronPDFはPDFから表形式データを抽出し、それをExcelやCSVのような形式に変換し、レビューや分析のためにデータをよりアクセスしやすくすることで、監査とコンプライアンスに役立ちます。 IronPDFはどのようなライセンスオプションを提供していますか? IronPDFは、試用版を含むさまざまなライセンスオプションを提供しているため、フルライセンスを購入する前にその機能を探索することができます。 PDFからテーブルを抽出する際に発生する可能性のある一般的なトラブルシューティングシナリオは何ですか? 一般的な問題には、テーブルの不整合なフォーマットやテキスト抽出のエラーがあります。IronPDFの強力な機能を使用すれば、正確な解析機能を提供することでこれらの課題を軽減できます。 IronPDF は .NET 10 と完全に互換性がありますか? また、テーブル抽出ワークフローにどのような利点がありますか? はい。IronPDF は .NET 10(および .NET 9、8、7、6、Core、Standard、Framework)をサポートしています。つまり、最新の .NET 10 プロジェクトでも設定の問題なしに使用できます。.NET 10 上で開発を行う開発者は、割り当ての削減や JIT コンパイラの最適化の強化といったランタイムパフォーマンスの向上の恩恵を受け、PDF 処理や表抽出操作の高速化に役立ちます。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 公開日 11月 13, 2025 C#で2つのPDFバイト配列をマージする方法 IronPDFを使用してC#で2つのPDFバイト配列をマージします。バイト配列、メモリストリーム、データベースから複数のPDFファイルを組み合わせる方法を簡単なコード例で学びましょう。 詳しく読む 公開日 11月 13, 2025 ASP.NET MVC PDFビューアを作成する方法 ASP.NET MVCアプリケーションのための強力なPDFビューアを構築します。PDFドキュメントを表示し、ビューをPDFに変換し、IronPDFを使用してインタラクティブな機能を追加します。 詳しく読む 公開日 11月 13, 2025 .NET HTMLからPDFへのコンバーターを構築する方法 IronPDFを使用して.NETでHTMLをPDFに変換する方法を学ぶ。 詳しく読む C# PDFコンバータを作る方法ASP.NETでC#を使用してHTMLをP...
公開日 11月 13, 2025 C#で2つのPDFバイト配列をマージする方法 IronPDFを使用してC#で2つのPDFバイト配列をマージします。バイト配列、メモリストリーム、データベースから複数のPDFファイルを組み合わせる方法を簡単なコード例で学びましょう。 詳しく読む
公開日 11月 13, 2025 ASP.NET MVC PDFビューアを作成する方法 ASP.NET MVCアプリケーションのための強力なPDFビューアを構築します。PDFドキュメントを表示し、ビューをPDFに変換し、IronPDFを使用してインタラクティブな機能を追加します。 詳しく読む