ASP.NET CoreでPDFファイルからデータを読み取る方法
IronPDF は、複雑な依存関係や手動解析なしで、簡単な C# コードを使用して PDF ファイルからテキスト、フォーム データ、およびテーブルを読み取るメソッドを提供することで、 ASP.NET Coreでの PDF データ抽出を簡素化します。
.NETアプリケーションで PDF ファイルを操作するのは、一見したよりも難しい場合があります。 アップロードされた請求書からテキストを抽出したり、アンケートからフォーム データを取得したり、データベースのテーブルを解析したりする必要がある場合があります。 多くのプロジェクトは、開発者が広範囲にわたるカスタム解析コードを必要とする過度に複雑なライブラリを使用するために速度が低下します。 IronPDF は、最小限のセットアップで PDF ドキュメントを読み取って処理できる簡単な代替手段を提供します。
単純なテキスト、インタラクティブなフォーム フィールド、構造化された表形式のデータなどを処理する場合でも、IronPDF の API を使用すると、低レベルの解析を行わずに PDF コンテンツに直接アクセスできます。 このガイドでは、 ASP.NET Coreで PDF ファイルからデータを読み取る方法について説明します。テキスト抽出、フォーム データの取得、テーブル解析、非同期ファイル アップロードの処理など、すべてプロジェクトにドロップできる C# コードを使用して説明します。
ASP.NET CoreプロジェクトでIronPDFをセットアップするにはどうすればよいですか?
始めるのは簡単です。 NuGet Package Manager Consoleまたは.NET CLIからIronPDF NuGetパッケージをインストールしてください:
Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
パッケージをインストールしたら、PDF ドキュメントを操作するファイルの先頭にIronPDF名前空間を追加します。
using IronPdf;
using IronPdf;
Imports IronPdf
ほとんどのプロジェクトに必要な設定はこれですべてです。 IronPDF は、外部のレンダリング プロセスや Windows 上の追加のネイティブ依存関係に依存しません。 Linux または Docker 環境の場合、プラットフォーム固有のガイダンスについてはIronPDF のドキュメントを参照してください。
無料の試用ライセンスを使用すると、実稼働で使用する前に完全な機能セットをテストできます。 IronPDFサイトから直接試用ライセンスを取得し、最初の PDF 操作の前に 1 行のコードで適用することができます。
PDF ファイルからテキストを抽出するにはどうすればよいでしょうか?
テキスト抽出は、最も一般的な PDF 読み取りタスクです。 IronPDFはドキュメントからすべての可読テキストを取り出すためにExtractAllTextを、ページレベルのアクセスのためにExtractTextFromPageを提供します。 どちらの方法でも読み取り順序が保持され、標準のテキスト エンコードが処理されます。
// Load a PDF document from disk
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text from every page
string allText = pdf.ExtractAllText();
// Extract text from a specific page (zero-based index)
string pageOneText = pdf.ExtractTextFromPage(0);
Console.WriteLine(allText);
// Load a PDF document from disk
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text from every page
string allText = pdf.ExtractAllText();
// Extract text from a specific page (zero-based index)
string pageOneText = pdf.ExtractTextFromPage(0);
Console.WriteLine(allText);
Imports System
' Load a PDF document from disk
Dim pdf = PdfDocument.FromFile("document.pdf")
' Extract all text from every page
Dim allText As String = pdf.ExtractAllText()
' Extract text from a specific page (zero-based index)
Dim pageOneText As String = pdf.ExtractTextFromPage(0)
Console.WriteLine(allText)
CODE-1589--@@は、改行を維持したまま、完全なテキストコンテンツを1つの文字列として返します。 CODE-1590--@@は、ゼロベースのインデックスを使用して1つのページをターゲットにしています。これは、複数ページのドキュメントの特定のセクションのコンテンツだけが必要な場合に便利です。
テキストと画像の抽出オプションの詳細については、 PDF からのテキスト抽出ガイドで、領域ベースの抽出などの高度なシナリオについて説明しています。
テキスト抽出をASP.NET Coreコントローラーに組み込むにはどうすればよいでしょうか?
次のコントローラアクションは、IFormFileを介してアップロードされたPDFを受け入れ、それをMemoryStreamに読み込み、抽出されたテキストをJSONとして返します:
using IronPdf;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
[HttpPost("extract-text")]
public IActionResult ExtractText(IFormFile pdfFile)
{
if (pdfFile == null || pdfFile.Length == 0)
return BadRequest("No PDF file uploaded.");
using var stream = new MemoryStream();
pdfFile.CopyTo(stream);
var pdf = new PdfDocument(stream.ToArray());
string extractedText = pdf.ExtractAllText();
return Ok(new { text = extractedText });
}
}
using IronPdf;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
[HttpPost("extract-text")]
public IActionResult ExtractText(IFormFile pdfFile)
{
if (pdfFile == null || pdfFile.Length == 0)
return BadRequest("No PDF file uploaded.");
using var stream = new MemoryStream();
pdfFile.CopyTo(stream);
var pdf = new PdfDocument(stream.ToArray());
string extractedText = pdf.ExtractAllText();
return Ok(new { text = extractedText });
}
}
Imports IronPdf
Imports Microsoft.AspNetCore.Http
Imports Microsoft.AspNetCore.Mvc
Imports System.IO
<ApiController>
<Route("api/[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpPost("extract-text")>
Public Function ExtractText(pdfFile As IFormFile) As IActionResult
If pdfFile Is Nothing OrElse pdfFile.Length = 0 Then
Return BadRequest("No PDF file uploaded.")
End If
Using stream As New MemoryStream()
pdfFile.CopyTo(stream)
Dim pdf As New PdfDocument(stream.ToArray())
Dim extractedText As String = pdf.ExtractAllText()
Return Ok(New With {.text = extractedText})
End Using
End Function
End Class
このエンドポイントは、アップロードされたファイルをバイト配列に変換し、PdfDocumentに直接渡します。 一時ファイルはディスクに書き込まれないため、コードがクリーンな状態に保たれ、不要なストレージのオーバーヘッドが回避されます。 IFormFile インターフェースは、マルチパートのフォーム送信とPostmanのようなAPIクライアントの両方で自然に動作します。
ASP.NET Coreで PDF フォーム データを読み取るにはどうすればよいでしょうか?
PDF フォーム ( AcroFormsとも呼ばれます) には、ユーザーが入力するインタラクティブなフィールドが含まれています。 IronPDFはFormプロパティを通してフォームフィールドを公開します。
次のエンドポイントは、アップロードされたフォーム PDF を読み取り、すべてのフィールド値を JSON 辞書として返します。
[HttpPost("extract-form")]
public IActionResult ExtractForm([FromForm] IFormFile pdfFile)
{
if (pdfFile == null || pdfFile.Length == 0)
return BadRequest("No PDF file uploaded.");
using var stream = new MemoryStream();
pdfFile.CopyTo(stream);
var pdf = new PdfDocument(stream.ToArray());
var formData = new Dictionary<string, string>();
if (pdf.Form != null)
{
foreach (var field in pdf.Form)
{
formData[field.Name] = field.Value;
}
}
return Ok(new { formFields = formData });
}
[HttpPost("extract-form")]
public IActionResult ExtractForm([FromForm] IFormFile pdfFile)
{
if (pdfFile == null || pdfFile.Length == 0)
return BadRequest("No PDF file uploaded.");
using var stream = new MemoryStream();
pdfFile.CopyTo(stream);
var pdf = new PdfDocument(stream.ToArray());
var formData = new Dictionary<string, string>();
if (pdf.Form != null)
{
foreach (var field in pdf.Form)
{
formData[field.Name] = field.Value;
}
}
return Ok(new { formFields = formData });
}
Imports Microsoft.AspNetCore.Mvc
Imports System.IO
<HttpPost("extract-form")>
Public Function ExtractForm(<FromForm> pdfFile As IFormFile) As IActionResult
If pdfFile Is Nothing OrElse pdfFile.Length = 0 Then
Return BadRequest("No PDF file uploaded.")
End If
Using stream As New MemoryStream()
pdfFile.CopyTo(stream)
Dim pdf = New PdfDocument(stream.ToArray())
Dim formData As New Dictionary(Of String, String)()
If pdf.Form IsNot Nothing Then
For Each field In pdf.Form
formData(field.Name) = field.Value
Next
End If
Return Ok(New With {.formFields = formData})
End Using
End Function
CODE-1597--@@の各フィールドは、@@--CODE-1598--@プロパティ(PDFオーサリングツールで設定されたフィールド識別子)と、@@--CODE-1599--@プロパティ(ユーザーが入力したテキストまたは選択)を持っています。 テキスト ボックス、チェック ボックス、ラジオ ボタン、ドロップダウンはすべてこのコレクションに表示されます。
JSON 応答を使用すると、追加の解析を行わずに、フォームの送信をデータベース、サードパーティ API、またはメッセージ キューに簡単に転送できます。 プログラムによる PDF フォームの作成または編集を伴うワークフローの場合、 PDF フォーム ガイドでは、フィールドを追加して値を事前入力する方法を示します。
典型的なフォーム抽出応答はどのようなものですか?
名前、電子メール、住所フィールドを持つPDFフォームから抽出されたJSONデータを200 OKステータスでPostmanテストインターフェイスに表示したAPIレスポンス。
上記の応答には、サンプルの連絡先フォーム PDF のフィールド名と値を含む 200 OK の結果が表示されます。 構造はフラットなキーと値のマップであり、ほとんどのデータベース スキーマまたは REST ペイロードにきれいにマップされます。
PDF から表データを抽出するにはどうすればよいでしょうか?
PDF ファイル内の表は位置指定されたテキストとして保存されます。PDF 形式にはネイティブの表データ構造はありません。 したがって、表形式のデータを抽出するということは、生のテキストを抽出し、解析ロジックを適用して行と列を再構築することを意味します。
IronPDFのExtractAllTextは空白文字とタブ文字を保持し、プログラムによって行を列に分割することを可能にします。 次のコントローラー アクションは、このアプローチを示しています。
[HttpPost("extract-table")]
public IActionResult ExtractTable([FromForm] IFormFile pdfFile)
{
if (pdfFile == null || pdfFile.Length == 0)
return BadRequest("No PDF file uploaded.");
using var memoryStream = new MemoryStream();
pdfFile.CopyTo(memoryStream);
var pdf = new PdfDocument(memoryStream.ToArray());
string text = pdf.ExtractAllText();
// Split into lines, then split each line into columns
string[] lines = text.Split(
new[] { '\r', '\n' },
StringSplitOptions.RemoveEmptyEntries
);
var tableData = new List<string[]>();
foreach (string line in lines)
{
string[] columns = line
.Split('\t')
.Where(c => !string.IsNullOrWhiteSpace(c))
.ToArray();
if (columns.Length > 0)
tableData.Add(columns);
}
var table = tableData.Select(r => string.Join(" | ", r)).ToList();
return Ok(new { Table = table });
}
[HttpPost("extract-table")]
public IActionResult ExtractTable([FromForm] IFormFile pdfFile)
{
if (pdfFile == null || pdfFile.Length == 0)
return BadRequest("No PDF file uploaded.");
using var memoryStream = new MemoryStream();
pdfFile.CopyTo(memoryStream);
var pdf = new PdfDocument(memoryStream.ToArray());
string text = pdf.ExtractAllText();
// Split into lines, then split each line into columns
string[] lines = text.Split(
new[] { '\r', '\n' },
StringSplitOptions.RemoveEmptyEntries
);
var tableData = new List<string[]>();
foreach (string line in lines)
{
string[] columns = line
.Split('\t')
.Where(c => !string.IsNullOrWhiteSpace(c))
.ToArray();
if (columns.Length > 0)
tableData.Add(columns);
}
var table = tableData.Select(r => string.Join(" | ", r)).ToList();
return Ok(new { Table = table });
}
Imports Microsoft.AspNetCore.Mvc
Imports System.IO
Imports System.Linq
<HttpPost("extract-table")>
Public Function ExtractTable(<FromForm> pdfFile As IFormFile) As IActionResult
If pdfFile Is Nothing OrElse pdfFile.Length = 0 Then
Return BadRequest("No PDF file uploaded.")
End If
Using memoryStream As New MemoryStream()
pdfFile.CopyTo(memoryStream)
Dim pdf As New PdfDocument(memoryStream.ToArray())
Dim text As String = pdf.ExtractAllText()
' Split into lines, then split each line into columns
Dim lines As String() = text.Split(New Char() {ControlChars.Cr, ControlChars.Lf}, StringSplitOptions.RemoveEmptyEntries)
Dim tableData As New List(Of String())()
For Each line As String In lines
Dim columns As String() = line.Split(ControlChars.Tab).Where(Function(c) Not String.IsNullOrWhiteSpace(c)).ToArray()
If columns.Length > 0 Then
tableData.Add(columns)
End If
Next
Dim table = tableData.Select(Function(r) String.Join(" | ", r)).ToList()
Return Ok(New With {.Table = table})
End Using
End Function
このアプローチは、一貫してタブで区切られた列を使用する表を持つ PDF に適しています。 列が可変の空白で区切られているドキュメントの場合、最小ギャップヒューリスティックを適用するか、文字の位置を検査する必要がある場合があります。 PDF の結合または分割ガイドは、抽出前にテーブルを含む特定のページを分離する必要がある場合に役立ちます。
テーブルを手動で解析する必要があるのはどのような場合ですか?
PDF が HTML または構造化データ ソースから生成されていない場合 (スキャンされた請求書やデスクトップ パブリッシング ツールで作成されたドキュメントなど) は、手動解析が適切な選択です。 タブ分割アプローチは、多くの標準 PDF を確実に処理します。 列の境界が不規則な場合は、IronPDF の DOM アクセス API を通じて生の文字座標を調べることでロジックを調整できます。
HTML から生成されたドキュメントの場合は、HTML 仲介を介したラウンドトリップを検討してください。 データ駆動型の HTML テンプレート ( HTML 文字列から PDF へのガイドで説明) から PDF を生成すると、テキストの位置が予測可能になり、抽出が簡単になります。
非同期 PDF ファイルのアップロードをどのように処理しますか?
運用ASP.NET Coreアプリケーションでは、スレッド プールのブロックを回避するために、ファイルのアップロードを非同期的に処理する必要があります。 CODE-1601--@@メソッドと@@--CODE-1602--@/@@--CODE-1603--@を組み合わせることで、コントローラをノンブロッキングに保つことができます:
[HttpPost("process-upload")]
public async Task<IActionResult> ProcessPdf([FromForm] IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest("No PDF file uploaded.");
using var ms = new MemoryStream();
await file.CopyToAsync(ms);
var pdf = new PdfDocument(ms.ToArray());
string text = pdf.ExtractAllText();
int pageCount = pdf.PageCount;
return Ok(new
{
text,
pages = pageCount
});
}
[HttpPost("process-upload")]
public async Task<IActionResult> ProcessPdf([FromForm] IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest("No PDF file uploaded.");
using var ms = new MemoryStream();
await file.CopyToAsync(ms);
var pdf = new PdfDocument(ms.ToArray());
string text = pdf.ExtractAllText();
int pageCount = pdf.PageCount;
return Ok(new
{
text,
pages = pageCount
});
}
Imports System.IO
Imports Microsoft.AspNetCore.Mvc
<HttpPost("process-upload")>
Public Async Function ProcessPdf(<FromForm> file As IFormFile) As Task(Of IActionResult)
If file Is Nothing OrElse file.Length = 0 Then
Return BadRequest("No PDF file uploaded.")
End If
Using ms As New MemoryStream()
Await file.CopyToAsync(ms)
Dim pdf As New PdfDocument(ms.ToArray())
Dim text As String = pdf.ExtractAllText()
Dim pageCount As Integer = pdf.PageCount
Return Ok(New With {
.text = text,
.pages = pageCount
})
End Using
End Function
CODE-1604--@@@コンストラクタは同期ですが、アップロードステップ(しばしばパイプラインの最も遅い部分)は非同期で実行されます。 このパターンは同時負荷でも適切にスケーリングされ、最小限の API エンドポイント、 Razor Pages ハンドラー、gRPC サービスと互換性があります。
アップロードファイルのサイズをどのように制限しますか?
ASP.NET Core、 要求本文のサイズ制限としてデフォルトで 30 MB が適用されます。 大きなPDFの場合は、Program.cs@の制限を増やしてください:
builder.Services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 100 * 1024 * 1024; // 100 MB
});
builder.Services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 100 * 1024 * 1024; // 100 MB
});
Imports Microsoft.Extensions.DependencyInjection
Imports Microsoft.AspNetCore.Http
builder.Services.Configure(Of FormOptions)(Sub(options)
options.MultipartBodyLengthLimit = 100 * 1024 * 1024 ' 100 MB
End Sub)
Kestrel には独自の制限があり、これを引き上げる必要がある場合もあります。
builder.WebHost.ConfigureKestrel(options =>
{
options.Limits.MaxRequestBodySize = 100 * 1024 * 1024;
});
builder.WebHost.ConfigureKestrel(options =>
{
options.Limits.MaxRequestBodySize = 100 * 1024 * 1024;
});
builder.WebHost.ConfigureKestrel(Sub(options)
options.Limits.MaxRequestBodySize = 100 * 1024 * 1024
End Sub)
アプリケーションが処理する PDF の現実的な最大サイズに基づいてこれらの値を設定します。 予期しない入力を防ぐために、アップロードされたファイルをIronPDFに渡す前に、必ずそのファイルの MIME タイプと拡張子を検証してください。
抽出した PDF コンテンツを他の形式に変換するにはどうすればよいですか?
テキストまたはフォーム データを取得したら、それをアプリケーションに必要なダウンストリーム プロセス (データベース書き込み、検索インデックス作成、レポート生成、API 呼び出しなど) にパイプできます。 IronPDF は、HTML を PDF にレンダリングする、逆方向の変換もサポートしています。
抽出したコンテンツを視覚的に表示したい場合は、 PDF から画像への変換ガイドを使用して元の PDF を画像としてレンダリングできます。 これは、ブラウザに完全な PDF を読み込まずにページのサムネイルを表示するドキュメントプレビュー機能に役立ちます。
出力ドキュメントをユーザーに配信する前に保護する必要がある場合、 IronPDF は後処理手順としてデジタル署名と透かしをサポートします。 ヘッダーとフッターの追加 (ヘッダーとフッターのガイドで説明されています) も同様に簡単です。
| シナリオ | IronPDFメソッド / プロパティ | 注意事項 |
|---|---|---|
| すべてのページのテキストを抽出する | pdf.ExtractAllText()を使用してください。 |
読み順で文書の全文を返します |
| 1ページからテキストを抽出する | pdf.ExtractTextFromPage(n)のようにします。 |
ゼロベースのページインデックス |
| AcroFormフィールドの読み取り | pdf.Form
| field.Nameとfield.Valueを列挙する |
| テーブル行を解析する | ExtractAllText() + 分割ロジック |
タブまたは空白のギャップで分割 |
| ページ数を数える | pdf.PageCount
| ページ区切りや検証に便利 |
| バイト配列から読み込む | new PdfDocument(bytes). |
一時ファイルは不要 |
| ファイルパスから読み込む | PdfDocument.FromFile(パス)。 |
サーバー側のファイルアクセスの場合 |
PDF データ抽出を設定した後の次の手順は何ですか?
これで、テキスト抽出、フォーム データの読み取り、テーブル解析、非同期アップロードの作業パターンが完成しました。 ここでは、アプリケーションの要件に基づいて次に検討すべきいくつかの方向性を示します。
抽出ワークフローと並行して PDF レポートを生成する必要がある場合は、 IronPDF の機能の概要で、 HTML から PDF へのレンダリング、スタンプ オーバーレイ、ページ操作について説明しています。 複数のソースからのレポートを結合するアプリケーションの場合、 "PDF の結合または分割"ガイドでドキュメントの結合と分割の手順を説明します。
ドキュメントを安全に配信するために、デジタル署名を使用すると、クライアントに送信する前に PDF を認証できます。 カスタム透かしは、生成されたドキュメントに視覚的なブランド化やドラフト ラベルを追加します。
あなたのプロジェクトがスキャンしたPDF(検索可能なテキストではなく画像)からデータを抽出する場合、ExtractAllTextを呼び出す前にOCRステップが必要になります。 Iron SoftwareのIronOCRはIronPDFと統合して、スキャンされたドキュメントのワークフローを処理します。
IronPDF は、個々の開発者およびチーム向けに柔軟なライセンス オプションで利用できます。 制限なしですべての機能をテストするには、無料トライアルから始めてください。 完全なドキュメントには、API リファレンス、スタートガイド、Windows、Linux、Docker、クラウド環境の展開ノートなどが含まれています。
ASP.NET Coreで PDF ファイルからデータを読み取る際に、低レベルの解析コードや重い依存関係は必要なくなります。 IronPDFを使用すると、アップロードされたファイルから抽出されたコンテンツまでのパスは、任意のコントローラーまたはサービス レイヤーに自然に収まる数行になります。
よくある質問
.NET CoreアプリケーションでPDFファイルを扱う際に発生する可能性のある課題は何ですか?
.NET CoreでのPDFファイルの取り扱いは、過度に複雑なライブラリを使わずにテキストを抽出したり、フォームデータを取得したり、テーブルを解析したりする必要があるため厄介です。
ASP.NETでのPDFファイルからのデータの読取りをIronPDFがどのように簡素化できるか?
IronPDFは、煩雑な依存関係や広範なカスタム解析コードの必要性を排除することで、PDF文書の読取りと処理を簡素化します。
PDFを処理する際に過度に複雑なライブラリを避けることが重要なのはなぜですか?
過度に複雑なライブラリを使用すると、プロジェクトが遅くなり開発時間が増加する可能性がありますが、IronPDFのような単純なソリューションはプロセスを簡素化します。
IronPDFはPDFファイルからどのような種類のデータを抽出できますか?
IronPDFは、テキスト、フォームデータ、およびテーブルをPDFファイルから抽出でき、多様なデータ処理ニーズに柔軟に対応します。
IronPDFはASP.NETアプリケーションでアップロードされた請求書を処理するのに使用できますか?
はい、IronPDFはASP.NETアプリケーションでアップロードされた請求書からテキストを効率的に読み取り処理できます。
IronPDFを使用する際にカスタムの解析コードを書く必要がありますか?
いいえ、IronPDFを使用することで、広範なカスタム解析コードを必要とせずにPDFドキュメントを処理できます。
.NET CoreアプリケーションでIronPDFを使用する利点は何ですか?
IronPDFは、PDFファイルを読取り処理するための簡単な方法を提供し、複雑な依存関係なしにデータ処理能力を向上させます。
.NET 10 — IronPDF は完全に互換性がありますか?
はい。IronPDF は .NET 10(および .NET 9、8、7、6、5、Core、Standard、Framework 4.6.2+)と完全に互換性があるように設計されており、最新の .NET プラットフォームで特別な回避策を講じることなく、すべての PDF 読み取りおよび書き込み機能を実行できます。
IronPDF は、ストリーミングされた PDF コンテンツを読み取るために .NET 10 の最新の API をサポートしていますか?
はい。.NET 10では、IronPDFはStreamやMemoryStreamなどのAPIを使用して、バイト配列またはメモリストリームからPDFデータを処理できるため、一時ファイルを保存することなくPDFを読み取ることができます。そのため、高パフォーマンスのサーバーシナリオや、Web APIでのPDFデータのアップロードや処理に適しています。


