C#高效替换 PDF中文本的常见场景及示例代码

 更新时间:2026年05月25日 08:13:30   作者:Eiceblue  
PDF是目前应用最广泛的电子文档格式之一,因其跨平台一致性强、格式固定等优势而被广泛用于文档存储、分发和存档,本文将详细介绍如何使用免费 .NET PDF 处理库,在 C# 中实现 PDF 文本的查找与替换,有需要的小伙伴可以了解下

PDF是目前应用最广泛的电子文档格式之一,因其跨平台一致性强、格式固定等优势而被广泛用于文档存储、分发和存档。在实际业务场景中,开发者常常需要通过编程方式批量修改PDF文档内容,如更新合同中的公司名称、替换日期信息、批量修正错别字等。

本文将详细介绍如何使用免费 .NET PDF 处理库,在 C# 中实现 PDF 文本的查找与替换。

免费库安装Install-Package FreeSpire.PDF

注意:免费版最多支持单个文档10页内容,超出部分不会被处理。使用前可评估自己的文件是否试用。

1. 核心 API 解析

免费库提供了专门用于 PDF 文本替换的 PdfTextReplacer 类,以及用于配置替换行为的 PdfTextReplaceOptions 类。这两个类是执行所有文本替换操作的基础。

主要方法和属性说明:

类/方法说明
PdfTextReplacer(PdfPageBase)构造函数,基于指定页面创建文本替换器
ReplaceAllText(string, string)将页面中所有匹配的文本替换为新文本
ReplaceAllText(PdfTextReplaceOptions)带选项的重载,支持更多替换行为控制
ReplaceText(string, string)仅替换页面中首次匹配到的文本
PdfTextReplaceOptions.ReplaceType设置替换类型(整词匹配、忽略大小写、自动适应宽度等)

2. 常见文本替换场景及代码

2.1 替换 PDF 指定页面中的文本

以下示例演示如何替换 PDF 文档中第一页的所有指定文本:

using Spire.Pdf;
using Spire.Pdf.Texts;

namespace ReplaceTextInPage
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建PdfDocument对象
            PdfDocument pdf = new PdfDocument();
            
            // 加载PDF文件
            pdf.LoadFromFile("input.pdf");
            
            // 获取第一页
            PdfPageBase page = pdf.Pages[0];
            
            // 基于页面创建PdfTextReplacer对象
            PdfTextReplacer textReplacer = new PdfTextReplacer(page);
            
            // 将页面中所有的"旧公司名"替换为"新公司名"
            textReplacer.ReplaceAllText("旧公司名", "新公司名");
            
            // 保存文档
            pdf.SaveToFile("output.pdf");
            
            // 释放资源
            pdf.Dispose();
        }
    }
}

2.2 替换 PDF 所有页面中的文本

要替换整个PDF文档中所有匹配的文本,只需遍历文档的每一页,对每页分别执行替换操作即可:

// 遍历所有页面
foreach (PdfPageBase page in pdf.Pages)
{
    // 创建PdfTextReplacer对象
    PdfTextReplacer textReplacer = new PdfTextReplacer(page);
                
    // 执行替换
    textReplacer.ReplaceAllText("旧内容", "新内容");
}
            

2.3 仅替换首次匹配的文本

如果只需要替换页面中第一次出现的匹配文本(后续出现保持不变),可以使用 ReplaceText 方法:

PdfTextReplacer textReplacer = new PdfTextReplacer(page);

// 仅替换第一次出现的"旧内容"
textReplacer.ReplaceText("旧内容", "新内容");

2.4 批量替换多组文本

在实际业务场景中,常常需要同时替换多个不同的文本内容。以下示例演示如何实现批量替换:

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>
{
    { "公司名称", "某某科技有限公司" },
    { "联系电话", "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];

// 创建PdfTextReplacer对象
PdfTextReplacer textReplacer = new PdfTextReplacer(page);

// 创建并配置PdfTextReplaceOptions对象
PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions();

// 设置替换选项
textReplaceOptions.ReplaceType = 
    PdfTextReplaceOptions.ReplaceActionType.WholeWord;  // 仅替换整个单词
textReplaceOptions.ReplaceType = 
    PdfTextReplaceOptions.ReplaceActionType.IgnoreCase; // 忽略大小写
textReplaceOptions.ReplaceType = 
    PdfTextReplaceOptions.ReplaceActionType.AutofitWidth; // 自动适应宽度

textReplacer.Options = textReplaceOptions;

// 执行替换
textReplacer.ReplaceAllText("Document", "File");

可用的ReplaceActionType枚举值包括:

  • WholeWord:仅匹配完整的单词,而非单词的一部分
  • IgnoreCase:忽略英文字母的大小写差异
  • AutofitWidth:自动调整新文本的宽度以适应原文本区域
  • Regex: 使用正则表达式匹配文本,适用于批量匹配多种模式

在实际使用中,可以根据需要设置单个或多个替换选项。

3.2 基于正则表达式的文本替换示例

利用 ReplaceActionTypeRegex 枚举可以实现利用正则表达式匹配PDF文档中的特定文本模式并进行批量替换。这对于处理不确定的文本内容(如日期格式、电话号码、邮箱地址等)尤为实用。

以下示例演示如何使用正则表达式匹配并替换PDF中的电子邮件地址:

using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Text.RegularExpressions;

namespace ReplaceUsingRegex
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建PdfDocument对象并加载PDF文件
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("contact.pdf");
            
            // 创建PdfTextReplaceOptions对象并设置为正则匹配模式
            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;
                
                // 使用正则表达式匹配常见邮箱格式并替换
                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的一个重要特性是,在执行文本替换时,PdfTextReplacer 接口默认会保持原文本的字体和样式不变。这意味着替换后的文本会自动沿用原文本的字体、字号、粗体/斜体等格式属性,无需手动设置,有效保证了替换后PDF文档的视觉一致性。

3.4 在指定区域内替换文本

该库还支持在PDF页面的指定区域内进行文本替换。这一功能非常实用,例如当只需要替换表格单元格内或特定文本框中的内容时,可以通过设置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();
    
    // 定义替换区域(矩形区域,参数依次为X坐标、Y坐标、宽度、高度)
    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的矩形区域,该区域内的匹配文本才会被替换。

总结

本文系统地介绍了使用 C# 实现PDF文本查找与替换的完整方法。从环境安装、基本用法到高级配置,涵盖了PDF文本替换开发中的主要场景。开发者可以根据实际业务场景灵活运用上述技术方案,实现对PDF文档的自动化批量处理,有效提升文档处理效率。

到此这篇关于C#高效替换 PDF中文本的常见场景及示例代码的文章就介绍到这了,更多相关C#替换 PDF文本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c#线程同步使用详解示例

    c#线程同步使用详解示例

    这篇文章主要介绍了c#线程同步使用方法,介绍几种常用的C#进行线程同步的方式,需要的朋友可以参考下
    2014-02-02
  • C#实现语音视频录制-附demo源码

    C#实现语音视频录制-附demo源码

    在很多语言视频软件系统中,经常有将实时的音频或者是视频录制为文件保存到磁盘空间的需求,本篇给大家讲C#实现语音视频录制-附demo源码,感兴趣的朋友一起来学习吧
    2015-08-08
  • C#调用非托管动态库中的函数方法

    C#调用非托管动态库中的函数方法

    这篇文章主要介绍了C#调用非托管动态库中的函数方法,本文讲解创建一个非托管动态库,然后在C#中调用它,需要的朋友可以参考下
    2015-02-02
  • .net实现序列化与反序列化实例解析

    .net实现序列化与反序列化实例解析

    这篇文章主要介绍了.net实现序列化与反序列化实例解析,需要的朋友可以参考下
    2014-08-08
  • C#切换鼠标左右键习惯无需控制面板中修改

    C#切换鼠标左右键习惯无需控制面板中修改

    本人一直喜欢左手使用鼠标,偶尔同事会临时操作一下,因为他的习惯是右手,还得在控制面板里进行更改,太麻烦了所以就编写一个控制台程序,双击一下即可切换左右键,热爱懒人的你可不要错过了哈
    2013-02-02
  • c#之获取本机主机名的四种方式总结

    c#之获取本机主机名的四种方式总结

    这篇文章主要介绍了c#之获取本机主机名的四种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Unity3D开发教程:愤怒的小鸟

    Unity3D开发教程:愤怒的小鸟

    这篇文章详细的讲解了如何从0开发出一个Unity3D的小游戏愤怒的小鸟,本文包含大量的图片与文字描述,也含有大量的源代码,可以让你快速入手,希望本篇文章对你有所帮助
    2021-06-06
  • C#特性-迭代器(上)及一些研究过程中的副产品

    C#特性-迭代器(上)及一些研究过程中的副产品

    这篇文章主要介绍了C#特性-迭代器(上)及一些研究过程中的副产品,需要的朋友可以参考下
    2014-12-12
  • C#读写INI文件的多种方法与性能优化指南

    C#读写INI文件的多种方法与性能优化指南

    这篇文章主要为大家详细介绍了C#读写INI文件的多种方法与性能优化指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-09-09
  • C#9.0中init访问器的实现

    C#9.0中init访问器的实现

    本文主要介绍了C#9.0中init访问器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05

最新评论