跳過到頁腳內容
USING IRONPDF

How to Read Data from PDF Files in ASP.NET Core

IronPDF 透過提供從 PDF 檔案中讀取文字、表單資料和表格的方法,簡化了 ASP.NET Core 中的 PDF 資料提取,無需複雜的依賴項或手動解析,只需編寫簡單的 C# 程式碼即可。

在 .NET Core 應用程式中處理 PDF 檔案可能比看起來更具挑戰性。 您可能需要從上傳的發票中提取文字、從調查中檢索表單數據,或解析資料庫中的表格。 許多專案進展緩慢是因為開發人員使用了過於複雜的程式庫。 這就是IronPDF 的優勢所在。 它允許您讀取和處理 PDF 文檔,而無需處理混亂的依賴關係或編寫大量的自訂解析程式碼。

無論您是處理簡單的文字、數位簽名還是結構化數據,IronPDF 都能讓一切變得輕鬆。 本指南向您展示如何在 ASP.NET 中讀取 PDF 文件中的資料、處理 IFormFile、使用位元組數組,甚至將文件傳回給使用者或將其呈現為HTML 字串。 您也可以將其整合到容器化部署中,在瀏覽器中顯示輸出,或將其儲存在基於雲端的資料庫中。

如何在 ASP.NET Core 中設定 IronPDF?

在 ASP.NET Core 專案中使用 IronPDF 非常快速。 使用以下命令透過 NuGet 套件管理器控制台安裝IronPDF NuGet 套件

Install-Package IronPdf

或透過 .NET CLI:

dotnet add package IronPdf

安裝完成後,將 IronPDF 命名空間新增至您的 Program 類別、控制器或服務:

using IronPdf;
using IronPdf;
$vbLabelText   $csharpLabel

有關Docker 部署Azure 設定和其他Linux 相容性等詳細安裝選項,請查看完整文件。 該函式庫在容器化環境中運作流暢,只需極少的配置,使其成為微服務架構的理想選擇。 您也可以將其設定為適用於AWS Lambda環境、 Windows 伺服器macOS 系統安裝概述提供了特定於平台的指導,而進階 NuGet 選項則涵蓋了企業部署場景。

如何從PDF文件中提取文字?

IronPDF 的ExtractAllText方法可立即存取 PDF 文件中的所有文字內容。 此方法可處理各種文字編碼,並保持原始文件的閱讀順序,從而確保從 ASP.NET Core 應用程式中的 PDF 檔案準確提取資料。 提取過程是線程安全的,並針對高效能場景進行了改進。 它支援國際語言UTF-8編碼

// Load a PDF document
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text
string allText = pdf.ExtractAllText();
// Extract text from specific page (0-indexed)
string pageText = pdf.ExtractTextFromPage(0); // current page
// Load a PDF document
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text
string allText = pdf.ExtractAllText();
// Extract text from specific page (0-indexed)
string pageText = pdf.ExtractTextFromPage(0); // current page
$vbLabelText   $csharpLabel

ExtractAllText方法傳回一個字串,其中包含 PDF 中的所有可讀文本,並保留換行符和空格。 對於頁面特定的提取, ExtractTextFromPage允許使用從零開始的索引來定位單一頁面。 當您提供正確的密碼時,此方法可以順利地用於加密 PDF 文件。 文本提取支援UTF-8編碼國際語言。 您也可以解析特定區域或使用PDF DOM 物件進行更精細的控制。

以下是一個實用的 ASP.NET Core 控制器實現,示範如何使用最少的記憶體分配從 PDF 檔案中讀取資料:

在控制器中實現文字擷取的最佳方法是什麼?

[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    [HttpPost("extract-text")]
    public IActionResult ExtractText(IFormFile pdfFile)
    {
        using var stream = new MemoryStream();
        pdfFile.CopyTo(stream);
        var pdf = new PdfDocument(stream.ToArray());
        var extractedText = pdf.ExtractAllText();
        return Ok(new { text = extractedText });
    }
}
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    [HttpPost("extract-text")]
    public IActionResult ExtractText(IFormFile pdfFile)
    {
        using var stream = new MemoryStream();
        pdfFile.CopyTo(stream);
        var pdf = new PdfDocument(stream.ToArray());
        var extractedText = pdf.ExtractAllText();
        return Ok(new { text = extractedText });
    }
}
$vbLabelText   $csharpLabel

這段範例程式碼能夠有效率地處理上傳的PDF檔案。 IFormFile 參數可與Razor PagesMVC 控制器搭配使用,而MemoryStream則可確保流暢處理,無需建立臨時文件,最終提升回應速度。您可以下載、儲存或處理提取的文本,以便將其儲存到資料庫、產生報告或使用響應式 HTML 渲染在瀏覽器中顯示內容。 考慮實現非同步模式以提高可擴展性,並採用自訂日誌記錄來監控擷取操作。 對於Blazor Server應用程序,同樣的方法也適用,只需對組件模型進行一些小的調整即可。

如何讀取PDF表單資料?

PDF 表單包含使用者需要填寫的互動式欄位。 IronPDF 透過其完整的表單 API 簡化了表單資料的擷取,支援所有標準的AcroForm欄位類型。您可以輕鬆提取所有表單欄位數據,包括文字方塊、複選框和內容類型詳細資訊。 該庫可自動處理數位簽章表單驗證。 它還支援符合 PDF/A歸檔要求和第 508 條無障礙標準。

然後可以將回應儲存到資料庫、傳回給用戶,或整合到您的 ASP.NET 應用程式工作流程中。 對於Azure 部署,請考慮使用Blob 儲存體來儲存處理後的表單資料。 以下程式碼示範如何實現此功能:

[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 });
        }
$vbLabelText   $csharpLabel

ExtractForm端點使用PdfDocument的 Form 屬性從上傳的 PDF 中讀取互動式欄位。 每個欄位都有一個名稱和一個值,它們被收集到一個字典中,並以 JSON 格式傳回。 這樣就可以輕鬆地從文字方塊、複選框和其他輸入框中捕獲數據,從而可以直接處理 PDF 表單提交內容並將其整合到您的應用程式或資料庫中。 如需自訂記錄表單處理事件日誌,請與您首選的日誌框架整合。 您也可以將表單展平以防止進一步編輯,或以程式設計方式新增新的表單欄位

為什麼表單擷取結果會回傳 JSON 格式?

API 回應顯示從 PDF 表單中提取的 JSON 數據,其中包含姓名、電子郵件和地址字段,並在 Postman 測試介面中顯示,狀態碼為 200 OK。

JSON 格式確保與現代 Web API 和微服務架構相容。 這種標準化格式可以與RESTful 服務、訊息佇列和雲端儲存解決方案無縫協作。 輕量級結構最大限度地減少了分散式系統中的網路開銷。 它也非常適合AJAX 請求Angular 應用程式。 此格式支援非同步操作,並且與OpenAI 整合配合良好,可用於智慧型文件處理。

如何從PDF文件中提取表格資料?

PDF 中的表格本質上是格式化的文本,需要解析邏輯來提取結構化資料。 IronPDF 可以提取文字並保留間距,然後您可以在 ASP.NET 中解析這些文字以從 PDF 檔案中讀取資料。 對於複雜的表格,可以考慮使用DOM 物件存取以程式設計方式存取文件結構。 該庫能夠處理多列佈局,並在提取過程中保留字體格式

[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);
    // Load PDF from byte array
    var pdf = new PdfDocument(memoryStream.ToArray());
    // Extract all text
    string text = pdf.ExtractAllText();
    // Split text into lines (rows)
    string[] lines = text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
    var tableData = new List<string[]>();
    foreach (string line in lines)
    {
        // Split line into columns using tab character
        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);
    // Load PDF from byte array
    var pdf = new PdfDocument(memoryStream.ToArray());
    // Extract all text
    string text = pdf.ExtractAllText();
    // Split text into lines (rows)
    string[] lines = text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
    var tableData = new List<string[]>();
    foreach (string line in lines)
    {
        // Split line into columns using tab character
        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 });
}
$vbLabelText   $csharpLabel

這段程式碼提取文本,並根據間距模式將其拆分為可能的表格行。 對於更複雜的表格,您可能需要使用關鍵字來識別表格邊界,或根據您的特定 PDF 結構實作更複雜的解析邏輯。 對於包含多個表格的大型文檔,可以考慮使用並行處理。 您也可以將表格轉換為 HTML 格式以便於操作,或匯出到 Excel進行進一步分析。

可以下載此輸出結果,在瀏覽器中顯示,或對其進行處理以獲取更多資訊。 您可以整合CSS 格式化HTML 字串渲染,以便在您的解決方案中動態顯示表格。 對於高效能應用場景,快取已解析的表格資料以避免重複處理。 在儲存提取的資料時,考慮使用壓縮技術來減少檔案大小。

何時應該手動解析表格,何時應該使用內建方法?

API 回應顯示從 PDF 提取的結構化發票數據,包括客戶詳細資料、發票元資料和包含價格的明細產品(JSON 格式)

手動解析為非標準表格格式提供了靈活性,而內建方法為標準佈局提供了更好的效能。 處理合併儲存格、巢狀表格或自訂格式時,請選擇手動解析。 使用內建擷取功能擷取具有一致列間距的標準表格資料。 對於複雜的佈局,可以考慮使用JavaScript進行預處理或使用自訂渲染選項Chrome渲染引擎可確保大多數表格格式的文字定位準確。

在 ASP.NET Core 中如何處理上傳的 PDF 檔案?

處理上傳的 PDF 檔案需要將IFormFile轉換為 IronPDF 可以讀取的格式。 這種方法與Razor PagesMVC 控制器搭配使用非常順暢。 對於容器化應用程序,請確保設定正確的記憶體分配。 此流程支援大型文件批次操作

[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);
            // Load PDF from byte array
            var pdf = new PdfDocument(ms.ToArray());
            // Extract text and page count
            var text = pdf.ExtractAllText();
            var pageCount = pdf.PageCount;
            return Ok(new
            {
                text = 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);
            // Load PDF from byte array
            var pdf = new PdfDocument(ms.ToArray());
            // Extract text and page count
            var text = pdf.ExtractAllText();
            var pageCount = pdf.PageCount;
            return Ok(new
            {
                text = text,
                pages = pageCount
            });
        }
$vbLabelText   $csharpLabel

此非同步任務可確保非阻塞處理,並可與事件處理程序和標準 .NET 程式庫搭配使用。 使用帶有 Content-Disposition 標頭的ReturnFile可以讓使用者安全地下載已處理的 PDF 檔案。 為了提高安全性,請考慮在處理文件之前實施文件驗證非同步模式提高了雲端部署的可擴充性。 您也可以在處理過程中新增自訂浮水印數位簽章。 對於MAUI 應用程序,類似的模式也適用,但需要根據平台進行調整。

如何提高文件上傳效能?

對大檔案實施串流上傳,以減少記憶體佔用。 在 IIS 設定或Kestrel 配置中配置適當的請求大小限制。 對於AWS Lambda 部署,請考慮使用預先簽署的 S3 URL 進行直接上傳,完全繞過您的 API。 對於 JavaScript 密集型內容,請使用渲染延遲;對於大型文檔,請使用自訂逾時。 啟用線性化以加快網頁瀏覽速度,並實現漸進式渲染以獲得更好的使用者體驗。 在無伺服器環境中,可考慮使用IronPdf.Slim來減少部署體積。

PDF資料擷取的下一步是什麼?

IronPDF 讓在 ASP.NET Core 和其他 .NET Core 應用程式中讀取、提取、處理和保存 PDF 文件變得容易。 無論您是處理表單、表格、純文字還是數位簽名,這個 .NET 函式庫都能將通常需要數小時才能完成的任務簡化為幾行程式碼。 您可以建立、轉換、存取和顯示HTML 、瀏覽器甚至映像格式的輸出。 圖書館支援PDF/A 合規性,可進行長期存檔,並符合第 508 條款無障礙標準

對於生產環境部署,請考慮實施健康檢查端點來監控 PDF 處理服務。 使用自訂日誌記錄來追蹤提取效能和錯誤。 實現分散式系統中處理瞬態故障的重試策略。 配置渲染選項以獲得最佳效能,並對經常存取的文件實施快取策略。 該庫與CI/CD 管線整合良好,並支援伺服器環境下的無頭渲染

首先進行免費試用,探索 IronPDF 在 ASP.NET Core 專案中的完整功能。 在購買許可證之前,您可以建立和測試您的 PDF 提取工作流程。 對於生產環境,IronPDF 提供靈活的授權選項,適合個人開發者或大型團隊。 該庫支援容器化部署,並為團隊提供完整的文件。 使用 IronPDF 是在 ASP.NET Core 中處理 PDF 檔案的最快方法之一,而且不會像通常那樣出現部署方面的麻煩。 查看快速入門指南以立即實施,或探索OCR 功能條碼產生高級功能,以獲得完整的文件處理解決方案。

常見問題解答

在 .NET Core 應用程式中使用 PDF 檔案時,可能會遇到哪些挑戰?

在 .NET Core 中處理 PDF 檔案可能很棘手,因為需要在不使用過於複雜的程式庫的情況下抽取文字、擷取表單資料或解析表格。

IronPDF 如何幫助簡化在 ASP.NET 中從 PDF 檔案讀取資料的過程?

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 是否支持 .NET 10 中最新的 API,用于读取流式 PDF 内容?

是的。在 .NET 10 中,IronPDF 可以使用 Stream 和 MemoryStream 等 API 從位元組陣列或記憶體流中處理 PDF 資料,讓您可以在不保存臨時檔案的情況下讀取 PDF。這使得它適用於高性能伺服器場景,以及在 Web API 中上傳或處理 PDF 資料。

Curtis Chau
技術撰稿人

Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。