博客 / 詳情

返回

如何通過 C# 實現 PDF 文本提取?

在日常辦公和開發中,從 PDF 文件中提取文本是一項高頻需求。手動複製粘貼不僅耗時,而且面對大量文檔時效率極低。傳統的自動化方案往往依賴 Adobe Reader 等外部組件,不僅部署麻煩,遇到加密或掃描件更是難以處理。

本文將介紹如何使用免費庫 Free Spire.PDF for .NET ,無需安裝任何 PDF 閲讀器,輕鬆實現高精度、高可靠性的 PDF 文本提取。我們將從方案對比開始,逐步講解環境搭建、核心代碼實現以及高級應用技巧,並提供可直接運行的示例。

PDF 文本提取方案對比

對比維度 傳統方案痛點 Spire.PDF 解決方案
依賴環境 需安裝 Adobe Reader 等第三方軟件 完全獨立的內核,無需任何外部依賴
加密文件支持 無法處理有密碼保護的 PDF 支持加載加密 PDF,只需提供密碼即可
開發複雜度 需理解 COM 組件調用,代碼繁瑣 ★★★★☆ 純 .NET 接口,簡潔直觀 ★★☆
文檔與社區 官方文檔零散,中文支持差 提供完整的 API 文檔及中文技術社區

C# 實戰教程:三步完成 PDF 文本提取

1. 環境準備

首先創建一個 .NET 控制枱應用程序(支持 .NET Framework 4.6.1+ 或 .NET Core 3.1+)。然後通過 NuGet 安裝 Spire.PDF 庫。

在 Visual Studio 中打開“程序包管理器控制枱”,輸入以下命令:

Install-Package FreeSpire.PDF

注意:免費版對處理的 PDF 頁數有限制(如最多10頁),適用於個人或小型項目。

2. 提取單頁文本的核心代碼

下面演示如何加載一個 PDF 文件,提取其中某一頁的所有文本,並保存到 TXT 文件中。

using System.IO;
using Spire.Pdf;
using Spire.Pdf.Texts;

namespace ExtractTextFromPage
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 加載 PDF 文檔
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile("示例.pdf");

            // 2. 獲取指定頁面(Pages 集合從 0 開始,此處獲取第 2 頁)
            PdfPageBase page = doc.Pages[1];

            // 3. 創建 PdfTextExtractor 對象,用於提取該頁文本
            PdfTextExtractor textExtractor = new PdfTextExtractor(page);

            // 4. 設置提取選項:提取頁面上所有文本
            PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
            extractOptions.IsExtractAllText = true;   // 提取全部文本

            // 5. 執行提取
            string text = textExtractor.ExtractText(extractOptions);

            // 6. 將提取的文本寫入文件
            File.WriteAllText("提取指定頁面文本.txt", text);

            // 7. 釋放資源
            doc.Close();
        }
    }
}

關鍵參數説明

  • PdfTextExtractor:文本提取器,綁定到指定頁面。
  • PdfTextExtractOptions:提取選項,可設置提取範圍(全頁或矩形區域)。
  • ExtractText():執行提取,返回該頁所有文本的字符串。

3. 高級應用技巧

處理加密 PDF 文件

若 PDF 受密碼保護,只需在加載時傳入密碼(所有者密碼或用户密碼均可,取決於文件權限):

doc.LoadFromFile("加密.pdf", "password");

提取所有頁面文本

通過遍歷文檔的每一頁,將提取的文本合併:

StringBuilder allText = new StringBuilder();
foreach (PdfPageBase page in doc.Pages)
{
    PdfTextExtractor extractor = new PdfTextExtractor(page);
    PdfTextExtractOptions options = new PdfTextExtractOptions();
    options.IsExtractAllText = true;
    string pageText = extractor.ExtractText(options);
    allText.AppendLine(pageText);
}
File.WriteAllText("全部頁面文本.txt", allText.ToString());

提取指定區域的文本

有時我們只需要頁面中某個矩形區域內的文本,可以通過 ExtractArea 屬性指定區域(單位:點,1 點 = 1/72 英寸):

PdfTextExtractOptions options = new PdfTextExtractOptions();
options.ExtractArea = new System.Drawing.RectangleF(50, 100, 400, 300);  // 左、上、寬、高
string areaText = textExtractor.ExtractText(options);

技術組合建議

在實際項目中,PDF 文本提取往往不是終點,還需要結合其他功能實現完整的數據處理流程:

  • 文本+格式提取:使用 PdfTextFinder 可以按樣式(字體、顏色、大小)定位特定文本,便於提取標題、關鍵詞等。
  • 表格數據提取:若 PDF 中包含表格,使用 PdfTableExtractor 可以直接提取結構化表格數據,返回 DataTable 或二維數組。
  • 掃描件 OCR 集成:對於掃描版 PDF(圖片格式),可搭配 Spire.OCR 庫進行光學字符識別,提取其中的文字信息。

總結

通過 Free Spire.PDF for .NET,開發者可以輕鬆繞過傳統方案的諸多限制,在 .NET 環境中實現穩定、高效的 PDF 文本提取。其簡潔的 API 設計大大降低了編碼難度,同時豐富的擴展功能(如加密處理、區域提取、表格識別)可以滿足不同業務場景的需求。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.