最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#高效替換 PDF中文本的常見場景及示例代碼

 更新時間:2026年05月25日 08:13:30   作者:Eiceblue  
PDF是目前應(yīng)用最廣泛的電子文檔格式之一,因其跨平臺一致性強(qiáng)、格式固定等優(yōu)勢而被廣泛用于文檔存儲、分發(fā)和存檔,本文將詳細(xì)介紹如何使用免費 .NET PDF 處理庫,在 C# 中實現(xiàn) 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á)式的文本替換示例

利用 ReplaceActionTypeRegex 枚舉可以實現(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c#線程同步使用詳解示例

    c#線程同步使用詳解示例

    這篇文章主要介紹了c#線程同步使用方法,介紹幾種常用的C#進(jìn)行線程同步的方式,需要的朋友可以參考下
    2014-02-02
  • C#實現(xiàn)語音視頻錄制-附demo源碼

    C#實現(xiàn)語音視頻錄制-附demo源碼

    在很多語言視頻軟件系統(tǒng)中,經(jīng)常有將實時的音頻或者是視頻錄制為文件保存到磁盤空間的需求,本篇給大家講C#實現(xiàn)語音視頻錄制-附demo源碼,感興趣的朋友一起來學(xué)習(xí)吧
    2015-08-08
  • C#調(diào)用非托管動態(tài)庫中的函數(shù)方法

    C#調(diào)用非托管動態(tài)庫中的函數(shù)方法

    這篇文章主要介紹了C#調(diào)用非托管動態(tài)庫中的函數(shù)方法,本文講解創(chuàng)建一個非托管動態(tài)庫,然后在C#中調(diào)用它,需要的朋友可以參考下
    2015-02-02
  • .net實現(xiàn)序列化與反序列化實例解析

    .net實現(xiàn)序列化與反序列化實例解析

    這篇文章主要介紹了.net實現(xiàn)序列化與反序列化實例解析,需要的朋友可以參考下
    2014-08-08
  • C#切換鼠標(biāo)左右鍵習(xí)慣無需控制面板中修改

    C#切換鼠標(biāo)左右鍵習(xí)慣無需控制面板中修改

    本人一直喜歡左手使用鼠標(biāo),偶爾同事會臨時操作一下,因為他的習(xí)慣是右手,還得在控制面板里進(jìn)行更改,太麻煩了所以就編寫一個控制臺程序,雙擊一下即可切換左右鍵,熱愛懶人的你可不要錯過了哈
    2013-02-02
  • c#之獲取本機(jī)主機(jī)名的四種方式總結(jié)

    c#之獲取本機(jī)主機(jī)名的四種方式總結(jié)

    這篇文章主要介紹了c#之獲取本機(jī)主機(jī)名的四種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Unity3D開發(fā)教程:憤怒的小鳥

    Unity3D開發(fā)教程:憤怒的小鳥

    這篇文章詳細(xì)的講解了如何從0開發(fā)出一個Unity3D的小游戲憤怒的小鳥,本文包含大量的圖片與文字描述,也含有大量的源代碼,可以讓你快速入手,希望本篇文章對你有所幫助
    2021-06-06
  • C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

    C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

    這篇文章主要介紹了C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品,需要的朋友可以參考下
    2014-12-12
  • C#讀寫INI文件的多種方法與性能優(yōu)化指南

    C#讀寫INI文件的多種方法與性能優(yōu)化指南

    這篇文章主要為大家詳細(xì)介紹了C#讀寫INI文件的多種方法與性能優(yōu)化指南,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-09-09
  • C#9.0中init訪問器的實現(xiàn)

    C#9.0中init訪問器的實現(xiàn)

    本文主要介紹了C#9.0中init訪問器的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05

最新評論

正宁县| 清远市| 石嘴山市| 曲水县| 涟源市| 邹平县| 米林县| 车险| 滕州市| 哈巴河县| 永丰县| 姜堰市| 肃宁县| 鞍山市| 无锡市| 双江| 黑水县| 阿克陶县| 大港区| 绿春县| 水城县| 阿城市| 遵义市| 南和县| 安康市| 永善县| 建宁县| 潞西市| 铜山县| 鄄城县| 加查县| 彰化县| 韶山市| 遂宁市| 酉阳| 四平市| 宁南县| 五家渠市| 泗洪县| 上犹县| 东兰县|