翻譯|使用教程|編輯:吉煒煒|2025-04-27 09:58:08.187|閱讀 134 次
概述:在文檔管理系統(tǒng)、法律審查工具、發(fā)票處理工具和其他企業(yè)應(yīng)用程序中,搜索PDF文檔中的特定文本是一項(xiàng)常見任務(wù)。在本篇博文中,您將學(xué)習(xí)如何使用 C# 以編程方式在 PDF 文件中搜索文本。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
在文檔管理系統(tǒng)、法律審查工具、發(fā)票處理工具和其他企業(yè)應(yīng)用程序中,搜索PDF文檔中的特定文本是一項(xiàng)常見任務(wù)。無論您是嘗試查找關(guān)鍵字、提取特定值還是遮蓋敏感信息,自動化 PDF 搜索都能為您節(jié)省大量時間和精力。
在本篇博文中,您將學(xué)習(xí)如何使用 C# 以編程方式在 PDF 文件中搜索文本。我們將通過實(shí)際的 C# 代碼示例,逐步向您講解主要功能。
Aspose.PDF for .NET簡化了使用 C# 在 PDF 文件中搜索文本的過程。它允許您查找精確的單詞、使用正則表達(dá)式匹配模式,甚至突出顯示或替換匹配的文本——所有這些只需幾行代碼即可完成。這個強(qiáng)大的庫提供了用于操作 PDF 文檔的強(qiáng)大功能。它允許開發(fā)人員輕松實(shí)現(xiàn)搜索功能。使用 Aspose.PDF,您可以快速在 PDF 中查找單詞,使其成為軟件開發(fā)人員的寶貴工具。
在深入研究 PDF 文本搜索之前,您需要設(shè)置開發(fā)環(huán)境。請按照以下步驟開始使用 Aspose.PDF for .NET:
從發(fā)行版下載或通過安裝。在 Visual Studio 中打開 .NET 項(xiàng)目,然后在 NuGet 包管理器控制臺中運(yùn)行以下命令:
此命令將 Aspose.PDF 庫添加到您的項(xiàng)目中,以便您可以訪問其強(qiáng)大的 PDF 處理功能。
在 C# 文件的頂部,添加以下使用指令:
現(xiàn)在您已準(zhǔn)備好使用 Aspose.PDF 的 API 開始在 PDF 文件中搜索文本。
使用 Aspose.PDF for .NET,您可以輕松地在 PDF 中搜索特定的單詞或短語,找到它們的所有實(shí)例,并采取諸如突出顯示它們或提取其詳細(xì)信息等操作。
請按照以下步驟執(zhí)行基本文本搜索:
以下代碼示例實(shí)現(xiàn)了這些步驟。
PM> Install-Package Aspose.PDF
2. 導(dǎo)入所需的命名空間
using Aspose.Pdf;
using Aspose.Pdf.Text;
使用 C# 在 PDF 中搜索文本
// Load the PDF file
Document pdfDocument = new Document("sample.pdf");
// Create a text absorber with the search keyword
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");
// Apply the absorber to all pages
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Get the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Print how many times the keyword was found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Loop through and print each found text
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
輸出示例
此示例演示了一個簡單的關(guān)鍵字搜索,該搜索適用于 PDF 中的所有頁面。您將看到匹配的文本及其頁碼。
為了更好地理解代碼中發(fā)生的情況,下面對所涉及的關(guān)鍵類和方法進(jìn)行了快速分解:
搜索 PDF 內(nèi)容時,您需要控制系統(tǒng)查找匹配項(xiàng)的方式,以確保結(jié)果準(zhǔn)確。有時,您可能希望忽略字母大小寫(“Invoice” 與 “invoice”),或者只想匹配完整的單詞,而不是其他單詞中的部分匹配。
Aspose.PDF for .NET 為您提供了實(shí)現(xiàn)這兩項(xiàng)功能的工具。
默認(rèn)情況下,搜索區(qū)分大小寫。要忽略字母大小寫,請使用TextSearchOptionswith IgnoreCaseenabled:
這將找到“發(fā)票”、“發(fā)票”、“發(fā)票”和其他變體。
您還可以阻止部分匹配。例如,搜索“car不應(yīng)匹配”care或scar“”。
這確保只有單詞“car”的獨(dú)立實(shí)例被匹配。
在某些情況下,您需要查找的不僅僅是某個特定的單詞,您還需要匹配諸如日期、電子郵件地址或參考編號之類的模式。這時,正則表達(dá)式 (regex)就派上用場了。
Aspose.PDF for .NET 允許您使用正則表達(dá)式在 PDF 文檔的任何部分進(jìn)行高級文本搜索。
假設(shè)您要查找以下格式的所有日期dd/mm/yyyy:
Regex 將您的搜索功能擴(kuò)展到靜態(tài)文本之外,幫助您從非結(jié)構(gòu)化文檔中提取結(jié)構(gòu)化數(shù)據(jù)。
有時,僅僅找到文本是不夠的——您可能需要知道它在PDF中的確切位置。Aspose.PDF允許您提取每個匹配項(xiàng)的頁碼、坐標(biāo)和格式詳細(xì)信息。
此功能對于建立索引、標(biāo)記文檔或創(chuàng)建可點(diǎn)擊鏈接特別有用。
現(xiàn)在,您確切地知道了“發(fā)票”一詞出現(xiàn)的位置以及它的樣式。這種細(xì)節(jié)水平為高級處理(例如注釋、工具提示或動態(tài)突出顯示)打開了大門。
在 PDF 中找到特定文本后,您可以進(jìn)一步操作,例如高亮顯示該文本,甚至將其替換為新內(nèi)容。Aspose.PDF for .NET 允許您使用該對象輕松地設(shè)置或修改匹配文本的樣式TextFragment。
您可以通過更改文本的背景和字體顏色來直觀地突出顯示文本。
這對于審查、批注或生成帶注釋的報告很有用。
需要編輯或更新文檔中的文本?直接替換即可:
Found 3 instance(s) of the keyword.
Text: invoice | Page: 1
Text: invoice | Page: 2
Text: invoice | Page: 3
了解 PDF 搜索中使用的關(guān)鍵類別
使用 C# 進(jìn)行不區(qū)分大小寫和全字搜索
不區(qū)分大小寫的搜索
// Load the PDF file
Document pdfDocument = new Document("sample.pdf");
// Create a text absorber with a case-insensitive regular expression
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");
// Set text search options to enable regular expression usage
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// Apply the absorber to all pages
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Retrieve the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Output the number of matches found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Loop through and display each found text fragment
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
僅匹配整個單詞
// Load the PDF file
Document pdfDocument = new Document("sample.pdf");
// Create a text absorber with a regular expression pattern for whole word match
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");
// Set text search options to enable regular expression usage
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// Apply the absorber to all pages
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Retrieve the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Output the number of matches found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Loop through and display each found text fragment
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
使用正則表達(dá)式在 PDF 中搜索
示例:查找 PDF 中的所有日期
// Load PDF and search for text
Document pdfDocument = new Document("sample.pdf");
// Enable regex in search options
TextSearchOptions searchOptions = new TextSearchOptions(true)
{
IsRegularExpressionUsed = true
};
// Create absorber with date pattern
TextFragmentAbsorber absorber = new TextFragmentAbsorber(@"\d{2}/\d{2}/\d{4}", searchOptions);
// Apply absorber to pages
pdfDocument.Pages.Accept(absorber);
// Loop and print found patterns
foreach (TextFragment fragment in absorber.TextFragments)
{
Console.WriteLine($"Found date: {fragment.Text} on Page {fragment.Page.Number}");
}
其他有用的模式:
搜索并提取包含職位詳細(xì)信息的文本
示例:獲取每場比賽的位置**
// Load PDF and search for text
Document pdfDocument = new Document("sample.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
// Get matched fragments
TextFragmentCollection fragments = absorber.TextFragments;
// Print position and text for each match
foreach (TextFragment fragment in fragments)
{
Console.WriteLine($"Text: {fragment.Text}");
Console.WriteLine($"Page: {fragment.Page.Number}");
Console.WriteLine($"Position - X: {fragment.Position.XIndent}, Y: {fragment.Position.YIndent}");
Console.WriteLine($"Font: {fragment.TextState.Font.FontName}, Size: {fragment.TextState.FontSize}");
Console.WriteLine("------------");
}
示例輸出
Text: invoice
Page: 1
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 2
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 3
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
突出顯示或替換找到的文本
在 PDF 中搜索并高亮顯示文本
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
foreach (TextFragment fragment in absorber.TextFragments)
{
// Highlight by changing text appearance
fragment.TextState.BackgroundColor = Color.Yellow;
fragment.TextState.ForegroundColor = Color.Red;
fragment.TextState.FontStyle = FontStyles.Bold;
}
查找和替換文本
foreach (TextFragment fragment in absorber.TextFragments)
{
fragment.Text = "REDACTED";
}
您甚至可以在替換時應(yīng)用新的格式:
通過編程突出顯示和替換文本,您可以自動執(zhí)行許多文檔處理任務(wù),例如清理模板、更新過時的內(nèi)容或?qū)彶樗饺藬?shù)據(jù)。
默認(rèn)情況下,Aspose.PDF 會搜索PDF 中的所有頁面。但有時,您可能希望將搜索范圍限制在特定頁面或頁面范圍內(nèi)——尤其是在處理大型文件或內(nèi)容可預(yù)測的情況下。
Aspose.PDF 使這兩項(xiàng)操作變得簡單。
如果您沒有指定頁面,吸收器會自動搜索每一頁。
您還可以通過直接定位來搜索單個頁面:
要搜索自定義范圍(例如第 2 頁至第 4 頁),只需循環(huán)遍歷該范圍:
這種方法使您能夠完全控制性能和精度,對于掃描或分段的文檔尤其有用。
在法律、人力資源或財(cái)務(wù)文檔中,通常會在共享之前隱藏敏感內(nèi)容(例如姓名、ID 或賬號)。Aspose.PDF for .NET 通過將搜索與編輯功能相結(jié)合,使這變得簡單。
您可以搜索術(shù)語,然后使用應(yīng)用黑色覆蓋RedactionAnnotation。
在 PDF 文件中搜索文本是許多基于文檔的應(yīng)用程序的一項(xiàng)重要功能——無論您是提取數(shù)據(jù)、審核內(nèi)容還是準(zhǔn)備文件進(jìn)行編輯。使用Aspose.PDF for .NET,您可以輕松執(zhí)行關(guān)鍵字搜索、使用正則表達(dá)式、突出顯示結(jié)果,甚至精確控制地編輯敏感信息。Aspose.PDF 提供開發(fā)人員友好的 API,可簡化復(fù)雜的 PDF 操作——節(jié)省您的時間,同時實(shí)現(xiàn)強(qiáng)大的自動化功能。
fragment.TextState.FontSize = 12;
fragment.TextState.Font = FontRepository.FindFont("Arial");
fragment.TextState.ForegroundColor = Color.Black;
在所有頁面或特定頁面中搜索
在所有頁面上搜索(默認(rèn))
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber); // Searches all pages
在特定頁面上搜索
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Search only on page 2
pdfDocument.Pages[2].Accept(absorber);
在一定范圍內(nèi)的頁面搜索
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Loop through selected pages
for (int i = 2; i <= 4; i++)
{
pdfDocument.Pages[i].Accept(absorber);
}
高級用例:搜索和編輯敏感信息
// Load PDF and search for text
Document pdfDocument = new Document("sample.pdf");
// Search for the name "John Doe"
TextFragmentAbsorber absorber = new TextFragmentAbsorber("John Doe");
pdfDocument.Pages.Accept(absorber);
// Loop through found fragments and redact
foreach (TextFragment fragment in absorber.TextFragments)
{
// Get position and dimensions
Aspose.Pdf.Rectangle rect = new Aspose.Pdf.Rectangle(
fragment.Position.XIndent,
fragment.Position.YIndent,
fragment.Position.XIndent + fragment.Rectangle.Width,
fragment.Position.YIndent + fragment.Rectangle.Height
);
// Create a redaction annotation
RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
{
FillColor = Color.Black,
Color = Color.Black
};
// Add and apply redaction
fragment.Page.Annotations.Add(redaction);
redaction.Redact();
}
// Save the modified document
pdfDocument.Save("SearchAndRedact.pdf");
會發(fā)生什么
結(jié)論
————————————————————————————————————————
關(guān)于慧都科技:
慧都科技是一家行業(yè)數(shù)字化解決方案公司,長期專注于軟件、油氣與制造行業(yè)。公司基于深入的業(yè)務(wù)理解與管理洞察,以系統(tǒng)化的業(yè)務(wù)建模驅(qū)動技術(shù)落地,幫助企業(yè)實(shí)現(xiàn)智能化運(yùn)營與長期競爭優(yōu)勢。在軟件工程領(lǐng)域,我們提供開發(fā)控件、研發(fā)管理、代碼開發(fā)、部署運(yùn)維等軟件開發(fā)全鏈路所需的產(chǎn)品,提供正版授權(quán)采購、技術(shù)選型、個性化維保等服務(wù),幫助客戶實(shí)現(xiàn)技術(shù)合規(guī)、降本增效與風(fēng)險可控。慧都科技Aspose在中國的官方授權(quán)代理商,提供Aspose系列產(chǎn)品免費(fèi)試用,咨詢,正版銷售等于一體的專業(yè)化服務(wù)。Aspose是文檔處理領(lǐng)域的優(yōu)秀產(chǎn)品,幫助企業(yè)高效構(gòu)建文檔處理的應(yīng)用程序。
下載|體驗(yàn)更多Aspose產(chǎn)品,請咨詢,或撥打產(chǎn)品熱線:023-68661681
加入Aspose技術(shù)交流QQ群(1041253375),與更多小伙伴一起探討提升開發(fā)技能。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)