通過C#代碼輕松提取PDF文本
PDF格式因其跨平臺兼容性強(qiáng)、安全性高等特點(diǎn)而被廣泛使用。但PDF文檔不易編輯,因此提取PDF文檔的文本從而進(jìn)行操作是一個(gè)常見的需求。提取PDF中的文本可以幫助我們對PDF文檔進(jìn)行內(nèi)容再利用,從而制作新的PDF文檔或?qū)?nèi)容插入到其他格式的文檔中。在.NET平臺,我們可以使用簡單的C#代碼輕松實(shí)現(xiàn)PDF文檔文本的提取。
本文所使用的方法需要用到Free Spire.PDF for .NET,NuGet:PM> Install-Package FreeSpire.PDF
。
用C#提取PDF文本的操作步驟
庫中提供了PdfTextExtractor類來處理PDF文檔的文本提取。我們可以使用頁面創(chuàng)建PdfTextExtractor對象,然后使用PdfTextExtractor.ExtractText()方法來提取頁面文本。同時(shí),PdfTextExtractOptions類能對提取選項(xiàng)進(jìn)行設(shè)置,如設(shè)置是否保留布局和設(shè)置提取的頁面區(qū)域。以下是一般操作步驟。
創(chuàng)建PdfDocument對象。
使用PdfDocument.LoadFromFile()方法載入PDF文檔。
使用PdfDocument.Pages[]屬性獲取指定頁面,也可以遍歷所有頁面。
使用頁面創(chuàng)建PdfTextExtractor對象。
創(chuàng)建PdfTextExtractOptions對象并設(shè)置提取選項(xiàng)。
使用PdfTextExtractor.ExtractText(PdfTextExtractOptions)方法提取頁面文本。
將提取的文本寫入文件或用于其他用途。
釋放資源。
提取PDF文本不保留文本布局
如果需要不保留文本布局直接提取文本內(nèi)容,可以將PdfTextExtractOptions.IsSimpleExtraction屬性設(shè)置為true來實(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對象 PdfDocument pdf = new PdfDocument(); // 載入PDF文檔 pdf.LoadFromFile("Sample.pdf"); // 創(chuàng)建PdfTextExtractOptions對象,并設(shè)置不保留布局 PdfTextExtractOptions extractOptions = new PdfTextExtractOptions(); extractOptions.IsSimpleExtraction = true; // 創(chuàng)建StringBuilder對象以儲存提取的文本 StringBuilder extractedText = new StringBuilder(); // 遍歷文檔頁面 foreach (PdfPageBase page in pdf.Pages) { // 使用頁面創(chuàng)建PdfTextExtractor對象 PdfTextExtractor extractor = new PdfTextExtractor(page); // 提取當(dāng)前頁面的文本 string text = extractor.ExtractText(extractOptions); // 將提取到的文本添加到StringBuilder對象 extractedText.Append(text); } // 將提取結(jié)果寫入文本文件 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對象 PdfDocument pdf = new PdfDocument(); // 載入PDF文檔 pdf.LoadFromFile("Sample.pdf"); // 創(chuàng)建文本提取選項(xiàng) PdfTextExtractOptions extractOptions = new PdfTextExtractOptions(); // 創(chuàng)建StringBuilder對象以儲存提取的文本 StringBuilder extractedText = new StringBuilder(); // 遍歷文檔頁面 foreach (PdfPageBase page in pdf.Pages) { // 使用頁面創(chuàng)建PdfTextExtractor對象 PdfTextExtractor extractor = new PdfTextExtractor(page); // 提取當(dāng)前頁面的文本 string text = extractor.ExtractText(extractOptions); // 將提取到的文本添加到StringBuilder對象 extractedText.Append(text); } // 將提取結(jié)果寫入文本文件 using (StreamWriter writer = new StreamWriter("output/ExtractedPDFText.txt", false, Encoding.UTF8)) { writer.Write(extractedText.ToString()); } // 釋放資源 pdf.Close(); } } }
結(jié)果
提取PDF頁面指定區(qū)域內(nèi)的文本
我們還可以通過PdfTextExtractOptions.ExtractArea屬性設(shè)置提取區(qū)域,從而實(shí)現(xiàn)提取頁面上指定區(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對象 PdfDocument pdf = new PdfDocument(); // 載入PDF文檔 pdf.LoadFromFile("Sample.pdf"); // 獲取指定頁面 PdfPageBase page = pdf.Pages[0]; // 創(chuàng)建PdfTextExtractor對象 PdfTextExtractor extractor = new PdfTextExtractor(page); // 創(chuàng)建PdfTextExtractOptions對象 PdfTextExtractOptions extractOptions = new PdfTextExtractOptions(); // 設(shè)置要提取文本的矩形區(qū)域 extractOptions.ExtractArea = new RectangleF(80, 100, 250, 150); // 提取頁面上指定位置的文本 string extractedText = extractor.ExtractText(extractOptions); // 將提取的文本寫入文本文件 File.WriteAllText("output/ExtractPDFPageAreaText.txt", extractedText, Encoding.UTF8); // 釋放資源 pdf.Close(); } } }
結(jié)果
以上就是通過C#代碼輕松提取PDF文本的詳細(xì)內(nèi)容,更多關(guān)于C#提取PDF文本的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# 獲取進(jìn)程退出代碼的實(shí)現(xiàn)示例
這篇文章主要介紹了C# 獲取進(jìn)程退出代碼的實(shí)現(xiàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02C#獲取文件名和文件路徑的兩種實(shí)現(xiàn)方式
這篇文章主要介紹了C#獲取文件名和文件路徑的兩種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07C#調(diào)用百度地圖API根據(jù)地名獲取經(jīng)緯度geocoding
本文主要介紹了C#調(diào)用百度地圖API根據(jù)地名獲取經(jīng)緯度geocoding,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04C#如何實(shí)現(xiàn)調(diào)取釘釘考勤接口的功能
這篇文章主要介紹了C#如何實(shí)現(xiàn)調(diào)取釘釘考勤接口的功能,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08