C#使用iTextSharp为PDF所有页面添加统一背景图

洛溪
洛溪
发布时间:2026-10-13| 6人浏览过
原创

在使用C#生成或编辑PDF时,常遇到需要为所有页面添加统一背景图(如水印、信纸底纹)的需求。传统方法在内容超过一页时容易失效或无法保持连续性。本文演示如何使用iTextSharp的 PdfStamper 类遍历PDF的每一页,并在其底层(UnderContent)添加固定坐标的图片,从而确保每页均有完整的背景。

实现原理与准备工作

iTextSharp 允许通过 PdfStamper 对现有PDF进行修改。为了不影响原有文字内容的显示,需要将背景图绘制在页面的“底层”而非“上层”。具体做法是读取PDF文件,获取总页数,循环每一页调用 GetUnderContent(int pageNumber) 获取画布,然后添加图片对象。

操作前请确保项目中已引用 itextsharp.dll 以及 System.Drawing 命名空间,用于处理图像文件。

核心操作步骤

第1步:初始化PDF读写流与处理器

首先定义源PDF路径和输出保存路径。使用 PdfReader 读取原文件,并用 PdfStamper 包裹写入流以准备修改。

public void SetPdfBackground(string pdfFilePath)
{
    // 定义输出路径,这里模拟生成一个新的PDF
    string destFile = HttpContext.Current.Server.MapPath("sample.pdf");
    
    // 创建文件流用于写入新PDF
    FileStream stream = new FileStream(destFile, FileMode.Create, FileAccess.ReadWrite);
    
    // 读取原始PDF
    PdfReader reader = new PdfReader(pdfFilePath);
    
    // 初始化 Stamper,用于修改内容
    PdfStamper stamper = new PdfStamper(reader, stream);

第2步:加载背景图片

从本地磁盘加载背景图片文件,并将其转换为 iTextSharp 可用的 Image 实例。关键设置是 SetAbsolutePosition(0, 0),这将使图片相对于页面左下角定位,确保铺满整个页面区域(假设图片尺寸适配或超出页面)。

    // 指定背景图片的路径
    string imagePage = HttpContext.Current.Server.MapPath("../images/2012/bg2.png");
    
    // 使用 System.Drawing 加载图片
    System.Drawing.Image image = System.Drawing.Image.FromFile(imagePage);
    
    // 转换为 iTextSharp Image 对象,格式设为 PNG 以支持透明通道
    var img = Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Png);
    
    // 设置绝对位置,原点通常对应页面左下脚
    img.SetAbsolutePosition(0, 0);

第3步:遍历页面并添加背景

获取PDF的总页数,使用 for 循环从第1页遍历至最后一页。在每次迭代中,获取当前页的底层画布 GetUnderContent(current),并通过 AddImage(img) 将预置的背景图片绘制上去。注意这里不需要再次设置位置,因为之前已经固定了坐标。

    int totalPage = reader.NumberOfPages;
    for (int current = 1; current <= totalPage; current++)
    {
        // 获取当前页的底层内容画布(UnderContent)
        // 这意味着背景会位于所有原有文字之下
        var canvas = stamper.GetUnderContent(current);
        
        // 添加背景图片
        canvas.AddImage(img);
    }

第4步:资源清理与保存

完成循环后,必须关闭 stamper 以将内存中的更改写入文件流。随后依次关闭 reader 和相关的文件流,释放资源。

    stamper.Close();
    reader.Close();
}

注意事项与排查

  • 路径问题:示例中使用 HttpContext.Current.Server.MapPath 是为了适应ASP.NET环境。如果在控制台或WPF应用中运行,请使用 Path.Combine 或相对路径指向实际的图片文件。
  • 图片大小:如果背景图片尺寸小于PDF页面尺寸,可能会出现边缘留白。建议预处理图片使其分辨率大于A4纸打印所需DPI,或使用 img.ScaleAbsoluteWidth(height) 等比例缩放以适应页面宽度。
  • 性能考虑:对于几百页的大文档,此同步阻塞方式可能导致界面卡顿。可在后台线程中执行此方法。
  • 版本兼容:iTextSharp 5.x 版本中,PdfStamper 的行为稳定。若升级到 iText 7 (.NET Core),API会有较大变化,需使用 PdfDocument 和 Canvas 类的新结构。

总结

通过 iTextSharp 的 PdfStamper 和底层画布机制,可以高效地为任意长度的PDF文档批量添加统一的背景图片或水印。该方法逻辑清晰,不破坏原有文本排版,是PDF后期处理的常用技巧。以上就是C#使用iTextSharp设置PDF所有页面背景图的详细内容,更多关于C# PDF编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。