通過(guò)C#代碼輕松提取PDF文本
PDF格式因其跨平臺(tái)兼容性強(qiáng)、安全性高等特點(diǎn)而被廣泛使用。但PDF文檔不易編輯,因此提取PDF文檔的文本從而進(jìn)行操作是一個(gè)常見(jiàn)的需求。提取PDF中的文本可以幫助我們對(duì)PDF文檔進(jìn)行內(nèi)容再利用,從而制作新的PDF文檔或?qū)?nèi)容插入到其他格式的文檔中。在.NET平臺(tái),我們可以使用簡(jiǎn)單的C#代碼輕松實(shí)現(xiàn)PDF文檔文本的提取。
本文所使用的方法需要用到Free Spire.PDF for .NET,NuGet:PM> Install-Package FreeSpire.PDF。
用C#提取PDF文本的操作步驟
庫(kù)中提供了PdfTextExtractor類(lèi)來(lái)處理PDF文檔的文本提取。我們可以使用頁(yè)面創(chuàng)建PdfTextExtractor對(duì)象,然后使用PdfTextExtractor.ExtractText()方法來(lái)提取頁(yè)面文本。同時(shí),PdfTextExtractOptions類(lèi)能對(duì)提取選項(xiàng)進(jìn)行設(shè)置,如設(shè)置是否保留布局和設(shè)置提取的頁(yè)面區(qū)域。以下是一般操作步驟。
創(chuàng)建PdfDocument對(duì)象。
使用PdfDocument.LoadFromFile()方法載入PDF文檔。
使用PdfDocument.Pages[]屬性獲取指定頁(yè)面,也可以遍歷所有頁(yè)面。
使用頁(yè)面創(chuàng)建PdfTextExtractor對(duì)象。
創(chuàng)建PdfTextExtractOptions對(duì)象并設(shè)置提取選項(xiàng)。
使用PdfTextExtractor.ExtractText(PdfTextExtractOptions)方法提取頁(yè)面文本。
將提取的文本寫(xiě)入文件或用于其他用途。
釋放資源。
提取PDF文本不保留文本布局
如果需要不保留文本布局直接提取文本內(nèi)容,可以將PdfTextExtractOptions.IsSimpleExtraction屬性設(shè)置為true來(lái)實(shí)現(xiàn)。以下是代碼示例:
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text;
namespace ExtractPDFText
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建PdfDocument對(duì)象
PdfDocument pdf = new PdfDocument();
// 載入PDF文檔
pdf.LoadFromFile("Sample.pdf");
// 創(chuàng)建PdfTextExtractOptions對(duì)象,并設(shè)置不保留布局
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
extractOptions.IsSimpleExtraction = true;
// 創(chuàng)建StringBuilder對(duì)象以儲(chǔ)存提取的文本
StringBuilder extractedText = new StringBuilder();
// 遍歷文檔頁(yè)面
foreach (PdfPageBase page in pdf.Pages)
{
// 使用頁(yè)面創(chuàng)建PdfTextExtractor對(duì)象
PdfTextExtractor extractor = new PdfTextExtractor(page);
// 提取當(dāng)前頁(yè)面的文本
string text = extractor.ExtractText(extractOptions);
// 將提取到的文本添加到StringBuilder對(duì)象
extractedText.Append(text);
}
// 將提取結(jié)果寫(xiě)入文本文件
using (StreamWriter writer = new StreamWriter("output/ExtractedPDFText.txt", false, Encoding.UTF8))
{
writer.Write(extractedText.ToString());
}
// 釋放資源
pdf.Close();
}
}
}
結(jié)果

保留文本布局提取PDF文本
如果在提取PDF文本時(shí)需要保留PDF文本的布局(使用空格填補(bǔ)),則可以直接使用默認(rèn)的提取選項(xiàng)提取PDF文本。以下是代碼示例:
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text;
namespace ExtractPDFTextAndLayout
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建PdfDocument對(duì)象
PdfDocument pdf = new PdfDocument();
// 載入PDF文檔
pdf.LoadFromFile("Sample.pdf");
// 創(chuàng)建文本提取選項(xiàng)
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
// 創(chuàng)建StringBuilder對(duì)象以儲(chǔ)存提取的文本
StringBuilder extractedText = new StringBuilder();
// 遍歷文檔頁(yè)面
foreach (PdfPageBase page in pdf.Pages)
{
// 使用頁(yè)面創(chuàng)建PdfTextExtractor對(duì)象
PdfTextExtractor extractor = new PdfTextExtractor(page);
// 提取當(dāng)前頁(yè)面的文本
string text = extractor.ExtractText(extractOptions);
// 將提取到的文本添加到StringBuilder對(duì)象
extractedText.Append(text);
}
// 將提取結(jié)果寫(xiě)入文本文件
using (StreamWriter writer = new StreamWriter("output/ExtractedPDFText.txt", false, Encoding.UTF8))
{
writer.Write(extractedText.ToString());
}
// 釋放資源
pdf.Close();
}
}
}
結(jié)果

提取PDF頁(yè)面指定區(qū)域內(nèi)的文本
我們還可以通過(guò)PdfTextExtractOptions.ExtractArea屬性設(shè)置提取區(qū)域,從而實(shí)現(xiàn)提取頁(yè)面上指定區(qū)域內(nèi)的文本。以下是代碼示例:
using Spire.Pdf.Texts;
using Spire.Pdf;
using System.Drawing;
using System.Text;
namespace ExtractPDFTextArea
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建PdfDocument對(duì)象
PdfDocument pdf = new PdfDocument();
// 載入PDF文檔
pdf.LoadFromFile("Sample.pdf");
// 獲取指定頁(yè)面
PdfPageBase page = pdf.Pages[0];
// 創(chuàng)建PdfTextExtractor對(duì)象
PdfTextExtractor extractor = new PdfTextExtractor(page);
// 創(chuàng)建PdfTextExtractOptions對(duì)象
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
// 設(shè)置要提取文本的矩形區(qū)域
extractOptions.ExtractArea = new RectangleF(80, 100, 250, 150);
// 提取頁(yè)面上指定位置的文本
string extractedText = extractor.ExtractText(extractOptions);
// 將提取的文本寫(xiě)入文本文件
File.WriteAllText("output/ExtractPDFPageAreaText.txt", extractedText, Encoding.UTF8);
// 釋放資源
pdf.Close();
}
}
}
結(jié)果

以上就是通過(guò)C#代碼輕松提取PDF文本的詳細(xì)內(nèi)容,更多關(guān)于C#提取PDF文本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#實(shí)現(xiàn)文件讀寫(xiě)到SQLite數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了使用?C#?將文件讀寫(xiě)到?SQLite?數(shù)據(jù)庫(kù)的幾種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2025-01-01
C# 大數(shù)據(jù)導(dǎo)出word的假死報(bào)錯(cuò)的處理方法
C# 大數(shù)據(jù)導(dǎo)出word的假死報(bào)錯(cuò)的處理方法,需要的朋友可以參考一下2013-03-03
C#實(shí)現(xiàn)圖表中鼠標(biāo)移動(dòng)并顯示數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)圖表中鼠標(biāo)移動(dòng)并顯示數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
C# Csv實(shí)現(xiàn)基本的讀寫(xiě)和轉(zhuǎn)換DataTable
本文主要介紹了C# Csv實(shí)現(xiàn)基本的讀寫(xiě)和轉(zhuǎn)換DataTable,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
利用微軟com組件mstscax.dll實(shí)現(xiàn)window7遠(yuǎn)程桌面功能
利用微軟提供的com組件mstscax.dll實(shí)現(xiàn)類(lèi)似window遠(yuǎn)程桌面功能,大家參考使用吧2013-12-12
C#實(shí)現(xiàn)添加/替換/提取或刪除Excel中的圖片
在Excel中插入與數(shù)據(jù)相關(guān)的圖片,能將關(guān)鍵數(shù)據(jù)或信息以更直觀的方式呈現(xiàn)出來(lái),使文檔更加美觀,下面我們來(lái)看看如何在C#中實(shí)現(xiàn)添加/替換/提取或刪除Excel中的圖片吧2025-01-01

