如何使用 C# 为 PDF 文档添加水印
发布: (2025年12月5日 GMT+8 19:51)
4 min read
原文: Dev.to
Source: Dev.to
为什么要在 PDF 中添加水印
- 版权保护 – 声明文档所有权并阻止未授权复制。
- 文档状态指示 – 如 “草稿(DRAFT)”、 “已批准(APPROVED)” 或 “作废(VOID)”。
- 机密性标记 – 如 “机密(CONFIDENTIAL)”、 “最高机密(TOP SECRET)”、 “仅限内部使用(INTERNAL USE ONLY)”。
- 防伪追踪 – 嵌入二维码、序列号或其他追踪标记。
- 品牌或个性化 – 添加公司徽标或个人标识符。
为 C# 选择 PDF 库
| 库 | 类型 | 功能 | 许可证 | 最佳使用场景 |
|---|---|---|---|---|
| Spire.PDF | 商业 | 易于使用,API 直观,支持转换、表单、图像 | 商业授权 | 快速集成,功能完整 |
| iText7 | 开源/商业 | 强大,企业级的创建/编辑/加密/签名功能 | AGPLv3 / 商业授权 | 复杂的企业级定制 |
注意:iText7 的 AGPLv3 许可证要求如果分发则必须开源你的应用程序。商业使用需要购买许可证。
添加文字水印(Spire.PDF)
通过 NuGet 安装库:
Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
public class PdfWatermark
{
public static void AddTextWatermark(string inputFilePath, string outputFilePath, string watermarkText)
{
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(inputFilePath);
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 24, FontStyle.Bold));
PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.LightGray));
foreach (PdfPageBase page in doc.Pages)
{
PdfTextWatermark watermark = new PdfTextWatermark(watermarkText)
{
Font = font,
Brush = brush,
StringFormat = new PdfStringFormat(PdfTextAlignment.Center),
RotateAngle = -45
};
page.AddWatermark(watermark);
}
doc.SaveToFile(outputFilePath);
doc.Close();
}
public static void Main(string[] args)
{
string inputPdf = "input.pdf";
string outputPdf = "TextWatermark.pdf";
string watermarkText = "Confidential";
AddTextWatermark(inputPdf, outputPdf, watermarkText);
Console.WriteLine($"Watermark added to {outputPdf}");
}
}
步骤
- 使用
PdfDocument加载 PDF。 - 创建字体和半透明画刷。
- 遍历每一页并添加
PdfTextWatermark(居中、旋转 ‑45°)。 - 保存修改后的文档。
添加图片水印(Spire.PDF)
using Spire.Pdf;
using System.Drawing;
namespace AddImageWatermark
{
class Program
{
static void Main(string[] args)
{
PdfDocument document = new PdfDocument();
document.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");
Image image = Image.FromFile(@"C:\Users\Administrator\Desktop\logo.png");
int imgWidth = image.Width;
int imgHeight = image.Height;
for (int i = 0; i < document.Pages.Count; i++)
{
float pageWidth = document.Pages[i].ActualSize.Width;
float pageHeight = document.Pages[i].ActualSize.Height;
document.Pages[i].BackgroudOpacity = 0.3f;
document.Pages[i].BackgroundImage = image;
Rectangle rect = new Rectangle(
(int)(pageWidth - imgWidth) / 2,
(int)(pageHeight - imgHeight) / 2,
imgWidth,
imgHeight);
document.Pages[i].BackgroundRegion = rect;
}
document.SaveToFile("ImageWatermark.pdf");
document.Close();
}
}
}
步骤
- 加载源 PDF。
- 加载水印图片并获取其尺寸。
- 对每一页设置
BackgroudOpacity(例如 0.3)并指定BackgroundImage。 - 使用
Rectangle将图片居中放置在页面中间。 - 保存生成的 PDF。
结论
使用 Spire.PDF 等库,你可以在 C# 应用程序中快速实现文字和图片水印。这些技术有助于实现版权保护、指示文档状态、嵌入品牌标识,并提升整体文档的安全性和可追溯性。