
如何使用IronPDF構建ASP.NET Core PDF檢視器
IronPDF簡化在ASP.NET Core中提取PDF資料,通過提供方法來閱讀文字、表單資料和表格,使用簡單的C#程式碼,無需複雜的依賴或手動解析。
在.NET應用程式中處理PDF檔案可能比最初看起來更具挑戰性。 您可能需要從上傳的發票中提取文字、從調查中檢索表單資料或解析表格以用於您的資料庫。 許多專案因為開發者使用過於複雜的程式庫,這些程式庫需要大量的自訂解析程式碼而變慢。 IronPDF提供了簡單的替代方案,讓您以最少的設置讀取和處理PDF文件。
無論您是在處理簡單的文字、互動式表單欄位,還是結構化的表格資料,IronPDF的API讓您可以直接存取PDF內容,無需低層級解析。 本指南介紹如何在ASP.NET Core中讀取PDF檔案中的資料,涵蓋了文字提取、表單資料檢索、表格解析和非同步檔案上傳處理——所有這些都使用您可以嵌入到專案中的C#程式碼。
您如何在ASP.NET Core專案中設置IronPDF?
開始是很簡單的。 從NuGet套件管理控制台或.NET CLI安裝IronPDF NuGet套件,使用以下命令之一:
安裝套件後,在所有處理PDF文件的檔案頂部新增IronPDF命名空間:
using IronPdf;Imports IronPdf這就是大多數專案所需的所有設置。 IronPDF不依賴於外部呈現過程或在Windows上需要的額外本機依賴。 對於Linux或Docker環境,請參閱IronPDF文件以獲得平台特定的指導。
免費試用授權允許您在投入生產使用前測試完整的功能集。 您可以直接從IronPDF網站獲取試用授權並在首次PDF操作之前通過一行程式碼應用它。
您如何從PDF檔案中提取文字?
文字提取是最常見的PDF閱讀任務。 IronPDF提供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);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)ExtractAllText返回完整的文字內容作為單個字串,保留換行符。 ExtractTextFromPage針對使用從零開始的索引的單個頁面,這在您只需要從多頁文件的特定部分獲取內容時很有用。
有關文字和圖像提取選項的深入介紹,從PDF提取文字指南涵蓋了包括基於區域的提取在內的高級情境。
您如何將文字提取整合到ASP.NET Core控制器中?
以下控制器動作接受通過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 });
}
}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介面自然地與多部分表單提交和API客戶端(例如Postman)搭配使用。
您如何在ASP.NET Core中讀取PDF表單資料?
PDF表單—也稱為AcroForms—包含使用者填寫的互動式欄位。 IronPDF通過PdfDocument,讓您獲取文件中每一欄位的名稱和值。
以下端點讀取上傳的表單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 });
}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在Value屬性(使用者輸入的文字或選擇)。 文字框、勾選框、選項按鈕和下拉框皆出現在此集合中。
JSON回應使其容易將表單提交轉發到資料庫、第三方API或消息隊列,無需任何額外的解析。 對於涉及以編程方式建立或編輯PDF表單的工作流,PDF表單指南展示如何新增欄位並預填值。
典型的表單提取回應看起來如何?

上述回應顯示了一個200 OK的結果,包含樣本聯繫表單PDF中的欄位名稱和數值。 其結構是一個扁平的鍵值映射,這潔淨地映射到大多數資料庫模式或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 });
}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模板生成您的PDF(HTML字串到PDF指南中涵蓋),意味著文字位置將是可預測的,並且提取將是直接的。
如何處理非同步PDF檔案上傳?
生產環境中的ASP.NET Core應用應非同步處理文件上傳,以避免阻塞執行緒池。 await結合,在控制器中保持非阻塞狀態:
[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 FunctionPdfDocument構造函式是同步的,但上傳步驟—通常是管線中最慢的部分—以非同步方式運行。 此模式在並發負載下能很好地擴展,並且與最小API端點、Razor Pages處理器和gRPC服務相容。
如何限制上傳的文件大小?
ASP.NET Core強制執行預設的請求主體大小限制為30 MB。 對於較大的PDF,請在Program.cs中增加限制:
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(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() | 以閱讀順序返回完整文件文字 |
| 從單頁提取文字 | pdf.ExtractTextFromPage(n) | 從零開始的頁面索引 |
| 讀取AcroForm欄位 | pdf.Form | 列舉field.Name和field.Value |
| 解析表格行 | ExtractAllText() + 拆分邏輯 | 根據製表符或空白間隙分割 |
| 計算頁數 | pdf.PageCount | 用於分頁和驗證 |
| 從位元組陣列載入 | new PdfDocument(bytes) | 不需要臨時文件 |
| 從文件路徑載入 | PdfDocument.FromFile(path) | 用於伺服器端文件存取 |
設置PDF資料提取後的下一步是什麼?
您已經有了用於文字提取、表單資料讀取、表格解析和非同步上傳的工作模型。 基於您的應用程式需求,這裡有一些接下來可以探索的方向。
如果您需要在提取工作流程中生成PDF報告,IronPDF功能概述涵蓋HTML到PDF渲染、附加覆蓋和頁面操作。 對於從多個來源合併報告的應用,合併或拆分PDF指南講解如何合併和拆分文件。
為了安全的文件傳遞,數位簽名允許您在將PDF發送給客戶之前進行認證。 自定義水印為生成的文件新增視覺品牌或草稿標籤。
如果您的專案需要從掃描的PDF(圖像而非可搜尋文字)中提取資料,則需要在呼叫ExtractAllText之前執行OCR步驟。 IronOCR來自Iron Software,整合了IronPDF以處理掃描的文件工作流程。
IronPDF在靈活的授權選項下可供個別開發者和團隊使用。 從免費試用開始,無限制地測試所有功能。 完整文件包含API參考、入門指南和Windows、Linux、Docker及雲端環境的部署說明。
在ASP.NET Core中從PDF檔案讀取資料不再需要低層級的解析程式碼或重型依賴。 使用IronPDF,從上傳的文件到提取內容的過程只是幾行程式碼,完美地融入到任何控制器或服務層。

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。
相關文章


