C#借助Free?Spire.PDF?for?.NET實(shí)現(xiàn)輕松提取PDF文本
在日常辦公和開(kāi)發(fā)中,從 PDF 文件中提取文本是一項(xiàng)高頻需求。手動(dòng)復(fù)制粘貼不僅耗時(shí),而且面對(duì)大量文檔時(shí)效率極低。傳統(tǒng)的自動(dòng)化方案往往依賴 Adobe Reader 等外部組件,不僅部署麻煩,遇到加密或掃描件更是難以處理。
本文將介紹如何使用免費(fèi)庫(kù) Free Spire.PDF for .NET ,無(wú)需安裝任何 PDF 閱讀器,輕松實(shí)現(xiàn)高精度、高可靠性的 PDF 文本提取。我們將從方案對(duì)比開(kāi)始,逐步講解環(huán)境搭建、核心代碼實(shí)現(xiàn)以及高級(jí)應(yīng)用技巧,并提供可直接運(yùn)行的示例。
PDF 文本提取方案對(duì)比
| 對(duì)比維度 | 傳統(tǒng)方案痛點(diǎn) | Spire.PDF 解決方案 |
|---|---|---|
| 依賴環(huán)境 | 需安裝 Adobe Reader 等第三方軟件 | 完全獨(dú)立的內(nèi)核,無(wú)需任何外部依賴 |
| 加密文件支持 | 無(wú)法處理有密碼保護(hù)的 PDF | 支持加載加密 PDF,只需提供密碼即可 |
| 開(kāi)發(fā)復(fù)雜度 | 需理解 COM 組件調(diào)用,代碼繁瑣 ★★★★☆ | 純 .NET 接口,簡(jiǎn)潔直觀 ★★☆ |
| 文檔與社區(qū) | 官方文檔零散,中文支持差 | 提供完整的 API 文檔及中文技術(shù)社區(qū) |
C# 實(shí)戰(zhàn)教程:三步完成 PDF 文本提取
1. 環(huán)境準(zhǔn)備
首先創(chuàng)建一個(gè) .NET 控制臺(tái)應(yīng)用程序(支持 .NET Framework 4.6.1+ 或 .NET Core 3.1+)。然后通過(guò) NuGet 安裝 Spire.PDF 庫(kù)。
在 Visual Studio 中打開(kāi)“程序包管理器控制臺(tái)”,輸入以下命令:
Install-Package FreeSpire.PDF
注意:免費(fèi)版對(duì)處理的 PDF 頁(yè)數(shù)有限制(如最多10頁(yè)),適用于個(gè)人或小型項(xiàng)目。
2. 提取單頁(yè)文本的核心代碼
下面演示如何加載一個(gè) PDF 文件,提取其中某一頁(yè)的所有文本,并保存到 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. 獲取指定頁(yè)面(Pages 集合從 0 開(kāi)始,此處獲取第 2 頁(yè))
PdfPageBase page = doc.Pages[1];
// 3. 創(chuàng)建 PdfTextExtractor 對(duì)象,用于提取該頁(yè)文本
PdfTextExtractor textExtractor = new PdfTextExtractor(page);
// 4. 設(shè)置提取選項(xiàng):提取頁(yè)面上所有文本
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
extractOptions.IsExtractAllText = true; // 提取全部文本
// 5. 執(zhí)行提取
string text = textExtractor.ExtractText(extractOptions);
// 6. 將提取的文本寫入文件
File.WriteAllText("提取指定頁(yè)面文本.txt", text);
// 7. 釋放資源
doc.Close();
}
}
}
關(guān)鍵參數(shù)說(shuō)明:
PdfTextExtractor:文本提取器,綁定到指定頁(yè)面。PdfTextExtractOptions:提取選項(xiàng),可設(shè)置提取范圍(全頁(yè)或矩形區(qū)域)。ExtractText():執(zhí)行提取,返回該頁(yè)所有文本的字符串。
3. 高級(jí)應(yīng)用技巧
處理加密 PDF 文件
若 PDF 受密碼保護(hù),只需在加載時(shí)傳入密碼(所有者密碼或用戶密碼均可,取決于文件權(quán)限):
doc.LoadFromFile("加密.pdf", "password");
提取所有頁(yè)面文本
通過(guò)遍歷文檔的每一頁(yè),將提取的文本合并:
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("全部頁(yè)面文本.txt", allText.ToString());
提取指定區(qū)域的文本
有時(shí)我們只需要頁(yè)面中某個(gè)矩形區(qū)域內(nèi)的文本,可以通過(guò) ExtractArea 屬性指定區(qū)域(單位:點(diǎn),1 點(diǎn) = 1/72 英寸):
PdfTextExtractOptions options = new PdfTextExtractOptions(); options.ExtractArea = new System.Drawing.RectangleF(50, 100, 400, 300); // 左、上、寬、高 string areaText = textExtractor.ExtractText(options);
技術(shù)組合建議
在實(shí)際項(xiàng)目中,PDF 文本提取往往不是終點(diǎn),還需要結(jié)合其他功能實(shí)現(xiàn)完整的數(shù)據(jù)處理流程:
- 文本+格式提取:使用
PdfTextFinder可以按樣式(字體、顏色、大?。┒ㄎ惶囟ㄎ谋?,便于提取標(biāo)題、關(guān)鍵詞等。 - 表格數(shù)據(jù)提取:若 PDF 中包含表格,使用
PdfTableExtractor可以直接提取結(jié)構(gòu)化表格數(shù)據(jù),返回 DataTable 或二維數(shù)組。 - 掃描件 OCR 集成:對(duì)于掃描版 PDF(圖片格式),可搭配 Spire.OCR 庫(kù)進(jìn)行光學(xué)字符識(shí)別,提取其中的文字信息。
總結(jié)
通過(guò) Free Spire.PDF for .NET,開(kāi)發(fā)者可以輕松繞過(guò)傳統(tǒng)方案的諸多限制,在 .NET 環(huán)境中實(shí)現(xiàn)穩(wěn)定、高效的 PDF 文本提取。其簡(jiǎn)潔的 API 設(shè)計(jì)大大降低了編碼難度,同時(shí)豐富的擴(kuò)展功能(如加密處理、區(qū)域提取、表格識(shí)別)可以滿足不同業(yè)務(wù)場(chǎng)景的需求。
到此這篇關(guān)于C#借助Free Spire.PDF for .NET實(shí)現(xiàn)輕松提取PDF文本的文章就介紹到這了,更多相關(guān)C#提取PDF文本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#控制臺(tái)程序的開(kāi)發(fā)與打包為一個(gè)exe文件實(shí)例詳解
所謂控制臺(tái)程序,就是沒(méi)有界面,運(yùn)行程序后只有一個(gè)黑色的類似cmd窗口,通過(guò)這個(gè)窗口進(jìn)行交互,下面這篇文章主要給大家介紹了關(guān)于C#控制臺(tái)程序的開(kāi)發(fā)與打包為一個(gè)exe文件的相關(guān)資料,需要的朋友可以參考下2023-05-05
C#?winform實(shí)現(xiàn)多語(yǔ)言切換功能
這篇文章主要為大家詳細(xì)介紹了如何使用C#?winform實(shí)現(xiàn)多語(yǔ)言切換功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下2024-02-02
基于C#?實(shí)現(xiàn)劉謙春晚魔術(shù)(示例代碼)
劉謙春晚魔術(shù)是一個(gè)讓人嘆為觀止的魔術(shù)表演,其中涉及到了數(shù)學(xué)、編程和創(chuàng)意的結(jié)合,看了春晚魔術(shù)的朋友們,是不是好奇春晚劉謙的魔術(shù)是怎么變的,本文分享C#?實(shí)現(xiàn)劉謙春晚魔術(shù)示例代碼,一起看看吧2024-02-02
C#編程實(shí)現(xiàn)發(fā)送郵件的方法(可添加附件)
這篇文章主要介紹了C#編程實(shí)現(xiàn)發(fā)送郵件的方法,具備添加附件的功能,涉及C#文件傳輸及郵件發(fā)送的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
c# 實(shí)現(xiàn)打印機(jī)狀態(tài)查詢與阻塞打印
這篇文章主要介紹了c# 引用System.Management來(lái)實(shí)現(xiàn)對(duì)打印機(jī)狀態(tài)的查詢,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-05-05
C#開(kāi)發(fā)Windows服務(wù)實(shí)例之實(shí)現(xiàn)禁止QQ運(yùn)行
這篇文章主要介紹了通過(guò)C#開(kāi)發(fā)Windows服務(wù),查殺qq進(jìn)程的服務(wù)功能,需要的朋友可以參考下2013-10-10
C#如何判斷.Net?Framework版本是否滿足軟件運(yùn)行需要的版本
這篇文章主要介紹了C#如何判斷.Net?Framework版本是否滿足軟件運(yùn)行需要的版本問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01

