C#高效替換 PDF中文本的常見場景及示例代碼
PDF是目前應(yīng)用最廣泛的電子文檔格式之一,因其跨平臺一致性強(qiáng)、格式固定等優(yōu)勢而被廣泛用于文檔存儲、分發(fā)和存檔。在實際業(yè)務(wù)場景中,開發(fā)者常常需要通過編程方式批量修改PDF文檔內(nèi)容,如更新合同中的公司名稱、替換日期信息、批量修正錯別字等。
本文將詳細(xì)介紹如何使用免費 .NET PDF 處理庫,在 C# 中實現(xiàn) PDF 文本的查找與替換。
免費庫安裝:Install-Package FreeSpire.PDF
注意:免費版最多支持單個文檔10頁內(nèi)容,超出部分不會被處理。使用前可評估自己的文件是否試用。
1. 核心 API 解析
免費庫提供了專門用于 PDF 文本替換的 PdfTextReplacer 類,以及用于配置替換行為的 PdfTextReplaceOptions 類。這兩個類是執(zhí)行所有文本替換操作的基礎(chǔ)。
主要方法和屬性說明:
| 類/方法 | 說明 |
|---|---|
PdfTextReplacer(PdfPageBase) | 構(gòu)造函數(shù),基于指定頁面創(chuàng)建文本替換器 |
ReplaceAllText(string, string) | 將頁面中所有匹配的文本替換為新文本 |
ReplaceAllText(PdfTextReplaceOptions) | 帶選項的重載,支持更多替換行為控制 |
ReplaceText(string, string) | 僅替換頁面中首次匹配到的文本 |
PdfTextReplaceOptions.ReplaceType | 設(shè)置替換類型(整詞匹配、忽略大小寫、自動適應(yīng)寬度等) |
2. 常見文本替換場景及代碼
2.1 替換 PDF 指定頁面中的文本
以下示例演示如何替換 PDF 文檔中第一頁的所有指定文本:
using Spire.Pdf;
using Spire.Pdf.Texts;
namespace ReplaceTextInPage
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建PdfDocument對象
PdfDocument pdf = new PdfDocument();
// 加載PDF文件
pdf.LoadFromFile("input.pdf");
// 獲取第一頁
PdfPageBase page = pdf.Pages[0];
// 基于頁面創(chuàng)建PdfTextReplacer對象
PdfTextReplacer textReplacer = new PdfTextReplacer(page);
// 將頁面中所有的"舊公司名"替換為"新公司名"
textReplacer.ReplaceAllText("舊公司名", "新公司名");
// 保存文檔
pdf.SaveToFile("output.pdf");
// 釋放資源
pdf.Dispose();
}
}
}
2.2 替換 PDF 所有頁面中的文本
要替換整個PDF文檔中所有匹配的文本,只需遍歷文檔的每一頁,對每頁分別執(zhí)行替換操作即可:
// 遍歷所有頁面
foreach (PdfPageBase page in pdf.Pages)
{
// 創(chuàng)建PdfTextReplacer對象
PdfTextReplacer textReplacer = new PdfTextReplacer(page);
// 執(zhí)行替換
textReplacer.ReplaceAllText("舊內(nèi)容", "新內(nèi)容");
}
2.3 僅替換首次匹配的文本
如果只需要替換頁面中第一次出現(xiàn)的匹配文本(后續(xù)出現(xiàn)保持不變),可以使用 ReplaceText 方法:
PdfTextReplacer textReplacer = new PdfTextReplacer(page);
// 僅替換第一次出現(xiàn)的"舊內(nèi)容"
textReplacer.ReplaceText("舊內(nèi)容", "新內(nèi)容");
2.4 批量替換多組文本
在實際業(yè)務(wù)場景中,常常需要同時替換多個不同的文本內(nèi)容。以下示例演示如何實現(xiàn)批量替換:
public class BatchTextReplacer
{
public static void ReplaceMultipleTexts(PdfDocument pdf,
Dictionary<string, string> replacementMap)
{
foreach (PdfPageBase page in pdf.Pages)
{
PdfTextReplacer textReplacer = new PdfTextReplacer(page);
foreach (var kvp in replacementMap)
{
textReplacer.ReplaceAllText(kvp.Key, kvp.Value);
}
}
}
}
// 使用示例
Dictionary<string, string> replacements = new Dictionary<string, string>
{
{ "公司名稱", "某某科技有限公司" },
{ "聯(lián)系電話", "400-888-XXXX" },
{ "版本號", "v2.0.1" }
};
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");
BatchTextReplacer.ReplaceMultipleTexts(pdf, replacements);
pdf.SaveToFile("updated.pdf");
3. 高級替換選項
3.1 配置替換行為
PdfTextReplaceOptions 類提供了豐富的選項來控制文本替換的行為:
using Spire.Pdf;
using Spire.Pdf.Texts;
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("input.pdf");
PdfPageBase page = pdf.Pages[0];
// 創(chuàng)建PdfTextReplacer對象
PdfTextReplacer textReplacer = new PdfTextReplacer(page);
// 創(chuàng)建并配置PdfTextReplaceOptions對象
PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions();
// 設(shè)置替換選項
textReplaceOptions.ReplaceType =
PdfTextReplaceOptions.ReplaceActionType.WholeWord; // 僅替換整個單詞
textReplaceOptions.ReplaceType =
PdfTextReplaceOptions.ReplaceActionType.IgnoreCase; // 忽略大小寫
textReplaceOptions.ReplaceType =
PdfTextReplaceOptions.ReplaceActionType.AutofitWidth; // 自動適應(yīng)寬度
textReplacer.Options = textReplaceOptions;
// 執(zhí)行替換
textReplacer.ReplaceAllText("Document", "File");
可用的ReplaceActionType枚舉值包括:
- WholeWord:僅匹配完整的單詞,而非單詞的一部分
- IgnoreCase:忽略英文字母的大小寫差異
- AutofitWidth:自動調(diào)整新文本的寬度以適應(yīng)原文本區(qū)域
- Regex: 使用正則表達(dá)式匹配文本,適用于批量匹配多種模式
在實際使用中,可以根據(jù)需要設(shè)置單個或多個替換選項。
3.2 基于正則表達(dá)式的文本替換示例
利用 ReplaceActionType 的 Regex 枚舉可以實現(xiàn)利用正則表達(dá)式匹配PDF文檔中的特定文本模式并進(jìn)行批量替換。這對于處理不確定的文本內(nèi)容(如日期格式、電話號碼、郵箱地址等)尤為實用。
以下示例演示如何使用正則表達(dá)式匹配并替換PDF中的電子郵件地址:
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text.RegularExpressions;
namespace ReplaceUsingRegex
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建PdfDocument對象并加載PDF文件
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("contact.pdf");
// 創(chuàng)建PdfTextReplaceOptions對象并設(shè)置為正則匹配模式
PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions();
textReplaceOptions.ReplaceType = PdfTextReplaceOptions.ReplaceActionType.Regex;
// 遍歷文檔所有頁面
for (int i = 0; i < pdf.Pages.Count; i++)
{
PdfPageBase page = pdf.Pages[i];
PdfTextReplacer textReplacer = new PdfTextReplacer(page);
textReplacer.Options = textReplaceOptions;
// 使用正則表達(dá)式匹配常見郵箱格式并替換
string regexPattern = @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}";
textReplacer.ReplaceAllText(regexPattern, "contact@newdomain.com");
}
pdf.SaveToFile("contact_updated.pdf");
pdf.Dispose();
}
}
}
3.3 保持原文本的字體和樣式
Free Spire.PDF的一個重要特性是,在執(zhí)行文本替換時,PdfTextReplacer 接口默認(rèn)會保持原文本的字體和樣式不變。這意味著替換后的文本會自動沿用原文本的字體、字號、粗體/斜體等格式屬性,無需手動設(shè)置,有效保證了替換后PDF文檔的視覺一致性。
3.4 在指定區(qū)域內(nèi)替換文本
該庫還支持在PDF頁面的指定區(qū)域內(nèi)進(jìn)行文本替換。這一功能非常實用,例如當(dāng)只需要替換表格單元格內(nèi)或特定文本框中的內(nèi)容時,可以通過設(shè)置SetReplacementArea方法限定替換范圍:
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("input.pdf");
for (int i = 0; i < pdf.Pages.Count; i++)
{
PdfPageBase page = pdf.Pages[i];
PdfTextReplacer replacer = new PdfTextReplacer(page);
PdfTextReplaceOptions replaceOptions = new PdfTextReplaceOptions();
// 定義替換區(qū)域(矩形區(qū)域,參數(shù)依次為X坐標(biāo)、Y坐標(biāo)、寬度、高度)
RectangleF rectangle = new RectangleF(10, 0, 841, 150);
replaceOptions.SetReplacementArea(rectangle);
replaceOptions.ReplaceType =
PdfTextReplaceOptions.ReplaceActionType.IgnoreCase;
replacer.Options = replaceOptions;
replacer.ReplaceAllText("sql", "123456");
}
pdf.SaveToFile("output.pdf");
pdf.Dispose();
上述代碼指定了一個從(10,0)開始、寬度841、高度150的矩形區(qū)域,該區(qū)域內(nèi)的匹配文本才會被替換。
總結(jié)
本文系統(tǒng)地介紹了使用 C# 實現(xiàn)PDF文本查找與替換的完整方法。從環(huán)境安裝、基本用法到高級配置,涵蓋了PDF文本替換開發(fā)中的主要場景。開發(fā)者可以根據(jù)實際業(yè)務(wù)場景靈活運用上述技術(shù)方案,實現(xiàn)對PDF文檔的自動化批量處理,有效提升文檔處理效率。
到此這篇關(guān)于C#高效替換 PDF中文本的常見場景及示例代碼的文章就介紹到這了,更多相關(guān)C#替換 PDF文本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用C#代碼在PDF文檔中添加、刪除和替換圖片
- C#/VB.NET實現(xiàn)在PDF文檔中插入,替換或刪除圖片
- C#借助Free?Spire.PDF?for?.NET實現(xiàn)輕松提取PDF文本
- 使用C#實現(xiàn)TXT文本轉(zhuǎn)換為PDF
- C#代碼實現(xiàn)將超鏈接插入到PDF的現(xiàn)有文本中
- 使用C#創(chuàng)建PDF文檔的完整教程(文本、圖片、形狀與表格插入)
- C#高效解析并提取PDF文檔中的文本與表格實戰(zhàn)指南
- C#使用Spire.PDF從PDF中提取文本的實戰(zhàn)指南
- C#使用Spire.PDF for .NET提取PDF文本的具體教程
- 通過C#高效提取PDF文本的完整指南
- 通過C#獲取PDF中指定文本或所有文本的字體信息
相關(guān)文章
C#調(diào)用非托管動態(tài)庫中的函數(shù)方法
這篇文章主要介紹了C#調(diào)用非托管動態(tài)庫中的函數(shù)方法,本文講解創(chuàng)建一個非托管動態(tài)庫,然后在C#中調(diào)用它,需要的朋友可以參考下2015-02-02
C#切換鼠標(biāo)左右鍵習(xí)慣無需控制面板中修改
本人一直喜歡左手使用鼠標(biāo),偶爾同事會臨時操作一下,因為他的習(xí)慣是右手,還得在控制面板里進(jìn)行更改,太麻煩了所以就編寫一個控制臺程序,雙擊一下即可切換左右鍵,熱愛懶人的你可不要錯過了哈2013-02-02
c#之獲取本機(jī)主機(jī)名的四種方式總結(jié)
這篇文章主要介紹了c#之獲取本機(jī)主機(jī)名的四種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

