
图片水印通常是出现在电子文档背景中的标识如 Logo 或图案用于表明内容的版权归属。为 PDF 文档添加图片水印可以在一定程度上防止数据被未经授权地使用或修改。本文将介绍如何在 C# 和 VB.NET 中通过编程的方式为 PDF 添加图片水印。环境准备在开始之前你需要在 .NET 项目中引入一个支持 PDF 操作的类库以 DLL 形式提供。常见的引入方式有两种下载对应的库文件DLL并手动添加到项目引用中通过 NuGet 包管理器进行安装完成以上配置后即可开始进行 PDF 水印的相关开发。1PM Install-Package Spire.PDF为 PDF 添加图片水印下面介绍为 PDF 文档添加图片水印的基本实现步骤创建 PDF 文档对象并加载需要处理的 PDF 文件读取作为水印的图片文件遍历文档中的每一页在当前页面上设置图片为背景水印并调整其位置和大小将处理后的文档保存为新的 PDF 文件示例代码如下123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354usingSpire.Pdf;usingSystem.Drawing;namespaceAddImageWatermark{classProgram{staticvoidMain(string[] args){// 创建 PdfDocument 对象PdfDocument document newPdfDocument();// 加载示例 PDF 文档document.LoadFromFile(C:\Users\Administrator\Desktop\sample.pdf);// 加载图片水印图片Image image Image.FromFile(C:\Users\Administrator\Desktop\logo.png);// 获取图片的宽度和高度intimgWidth image.Width;intimgHeight image.Height;// 遍历 PDF 的每一页for(inti 0; i document.Pages.Count; i){// 获取当前页面的宽度和高度floatpageWidth document.Pages[i].ActualSize.Width;floatpageHeight document.Pages[i].ActualSize.Height;// 设置背景透明度0~1值越小越透明document.Pages[i].BackgroudOpacity 0.3f;// 将图片设置为当前页面的背景水印document.Pages[i].BackgroundImage image;// 计算并设置图片在页面中的居中位置Rectangle rect newRectangle((int)(pageWidth - imgWidth) / 2,(int)(pageHeight - imgHeight) / 2,imgWidth,imgHeight);document.Pages[i].BackgroundRegion rect;}// 保存生成的 PDF 文件document.SaveToFile(AddImageWatermark.pdf);// 关闭文档document.Close();}}}方法补充在 C# 里给 PDF 文件打上图片水印主要有两种思路一是直接读取文件路径的简单水印Spire.PDF二是在 PDF 内容层实现精细控制和兼容的推荐做法iText 7 / Aspose.PDF。综合来看追求简单高效可选Spire.PDF需要精细控制、在 .NET Core 下开发或确保最高兼容性推荐iText 7预算充足且追求工业级稳定Aspose.PDF是很好的选择。具体区别可以参考下面这个对比表格维度Spire.PDFiText 7Aspose.PDF实现方式(Base/Core)直接设置背景图片PdfCanvas在内容层绘制Stamp对象实现图章许可证/费用商业 (有免费版限制)AGPL / 商业商业项目适用性新 .NET 项目起始推荐.NET Core(兼容)和跨平台推荐工业级、企业版兼容性选型代码复杂度较低 (API 封装高)中 (需处理 Canvas 和坐标系)中适用场景快速打标、替换背景图版权水印、精细分布水印矩阵、旋转、复杂排版要求1.Spire.PDF背景图片水印 (最简单推荐备选)通过BackgroundImage属性直接为页面添加背景图片并可以设置背景透明度和位置。安装 NuGet 包1Install-Package Spire.PDF背景水印代码示例基于 Spire.PDF 的实现方式比较直观加载 PDF 文件后遍历每一页为其设置背景图片并可以自定义背景透明度和位置。1234567891011121314151617181920212223242526272829303132usingSpire.Pdf;usingSystem.Drawing;classProgram{staticvoidMain(string[] args){PdfDocument document newPdfDocument();document.LoadFromFile(input.pdf);// 加载图片Image image Image.FromFile(watermark.png);// 遍历所有页面for(inti 0; i document.Pages.Count; i){// 设置背景透明度document.Pages[i].BackgroudOpacity 0.3f;// 设置背景图片document.Pages[i].BackgroundImage image;// 设置背景位置居中floatpageWidth document.Pages[i].ActualSize.Width;floatpageHeight document.Pages[i].ActualSize.Height;// 偏移量(相对左下角)居中右上角漂移intimgWidth image.Width;intimgHeight image.Height;// 计算居中位置intx (int)((pageWidth - imgWidth) / 2);inty (int)((pageHeight - imgHeight) / 2);document.Pages[i].BackgroundRegion newRectangle(x, y, imgWidth, imgHeight);}document.SaveToFile(output_spire.pdf);document.Close();}}代码说明代码会遍历 PDF 的每一页并将图片作为背景水印居中放置同时可以设置透明度。2.iText 7PdfCanvas 内容层水印 (推荐首选兼容性最好)这是基于最新版本 iText 7 的最佳实践通过PdfCanvas在内容层绘制确保水印始终显示在文档最上层。尤其适合 .NET Core 等跨平台场景。安装 NuGet 包1Install-Package itext7图片水印代码示例通过创建PdfCanvas对象直接在文档的“上层内容流”上绘制水印这是最推荐的做法尤其适合 .NET Core / .NET 5 环境。这种方式能确保水印始终显示在文档最上方。12345678910111213141516171819202122232425262728293031323334usingiText.Kernel.Geom;usingiText.Kernel.Pdf;usingiText.Kernel.Pdf.Canvas;usingiText.Layout;usingiText.IO.Image;classProgram{staticvoidMain(string[] args){// 1. 打开 PDF 文档 (只读/写入双重)using(PdfDocument pdfDoc newPdfDocument(newPdfReader(input.pdf),newPdfWriter(output_itext7.pdf))){ImageData imgData ImageDataFactory.Create(watermark.png);// 2. 遍历每一页for(inti 1; i pdfDoc.GetNumberOfPages(); i){PdfPage page pdfDoc.GetPage(i);PdfCanvas canvas newPdfCanvas(page);canvas.SaveState();// 设置水印透明度 (PDF 图形状态)PdfExtGState gState newPdfExtGState().SetFillOpacity(0.5f);canvas.SetExtGState(gState);// 3. 获取页面尺寸 (左下角为原点)Rectangle pageSize page.GetPageSize();floatx pageSize.GetWidth() / 2;floaty pageSize.GetHeight() / 2;// 4. 绘制带旋转和居中的图片canvas.AddImage(imgData, x, y,true);canvas.RestoreState();canvas.Release();}}}}代码说明PdfCanvas提供了低级别的绘图指令让水印精确绘制在 PDF 的图形流中。通过PdfExtGState可以轻松控制透明度。3.Aspose.PDFPdfFileStamp 对象水印 (工业级)使用PdfFileStamp和Stamp对象直接为 PDF 添加图片图章这个方法在 Aspose.PDF 中非常稳定定位精准。安装 NuGet 包1Install-Package Aspose.PDF图片水印代码示例通过Stamp对象将图片绑定为水印并可以精细控制其旋转角度、放置位置和大小。1234567891011121314151617181920212223usingAspose.Pdf;usingAspose.Pdf.Facades;classProgram{staticvoidMain(string[] args){// 加载 PDF 文档Document doc newDocument(input.pdf);// 用于添加图章的 Facade 类PdfFileStamp stampPdf newPdfFileStamp(doc);// 创建图章对象并绑定图片Aspose.Pdf.Facades.Stamp aStamp newAspose.Pdf.Facades.Stamp();aStamp.BindImage(watermark.png);aStamp.IsBackground true;// 作为背景aStamp.Rotation 90;// 旋转角度aStamp.SetOrigin(100, 100);// 左下角坐标 (单位: 磅)aStamp.SetImageSize(200, 200);// 设置大小stampPdf.AddStamp(aStamp);stampPdf.Save(output_aspose.pdf);stampPdf.Close();doc.Close();}}总结通过以上方法你可以在 C# 中轻松为 PDF 文档添加图片水印。核心思路其实很简单为每一页设置背景图片并通过透明度控制实现水印效果。在此基础上你还可以根据实际需求灵活调整水印的位置、大小和透明度甚至扩展为平铺或局部水印。整体实现成本低、可控性强非常适合用于文档保护、品牌展示以及自动化处理等场景。