产品比较

探索为 PDFsharp 添加水印到 PDF 的最佳替代方案

Kannaopat Udonpant
坎那帕·乌东攀
2025年三月27日
分享:

添加水印到PDF是文件安全、品牌化和版本控制的常见需求。 无论是将文件标记为机密、给正式报告加上品牌,还是防止未经授权的复制,水印都是一个必不可少的功能。

在C#中,开发人员有多个库可供选择,IronPDFPDFSharp 是两个最受欢迎的选项。 然而,它们的方法、易用性、性能和许可结构存在显著差异。 本文详细比较了IronPDF和PDFsharp在为现有PDF添加水印方面的功能,提供了关于它们功能性、实施过程和自定义能力的见解。

通过阅读本文,您将清楚了解哪一个库最适合您的项目需求,这取决于其易用性、性能和功能可用性。

理解 PDF 水印

什么是水印?

水印是文档上的图形或文本覆盖层,起到标识、阻止或品牌元素的作用。 水印可以是可见的,也可以是不可见的,这取决于它们的用途。

水印类型

  • 文本水印 – 通常是一个带有诸如“机密”或“草稿”之类信息的半透明叠加层。
  • 图像水印 – 一个嵌入到文档中的徽标、标志或图形。
  • 透明水印 – 一种在不影响文件可读性的情况下进行品牌标识的标记。
  • 水印标记 – 一种更加显眼、醒目的标记,确保可见性。

常见用例

  • 安全与保护 – 通过将文档标记为专有来防止未经授权的复制。
  • 品牌化 – 添加公司标志或签名以保持文档中的品牌一致性。
  • 版本控制 – 标记草稿、最终版本或文档修订。

IronPDF和PDFsharp概述

IronPDF

破损图片 添加自 Pixabay,请从您的文件中选择或将图片拖放到此处。

IronPDF 是一个高级的、功能丰富的 .NET 库,旨在简化 PDF 处理。 这对于寻找简便实现PDF操作任务(包括添加水印)的开发人员特别有用。

关键功能:

  • 简单直观的API,只需少量代码。
  • 支持文本和图像水印,并提供自定义选项。
  • 提供不透明度控制、定位和旋转以实现精确定位。
  • 兼容 .NET 6+、.NET Core 和 .NET Framework。
  • 适用于长期使用的永久许可模式。
  • 其他功能包括PDF 注释HTML 转 PDF 转换数字签名

PDFsharp

破损图片 添加自 Pixabay,请从您的文件中选择或将图片拖放到此处。

PDFsharp 是一个开源库,允许开发人员在 C# 中创建、编辑和操作 PDF。 虽然水印功能高度灵活,但相比IronPDF需要更多的手动操作。

关键功能:

  • 免费且开源,使其对预算有限的项目来说具有成本效益。
  • 提供对 PDF 绘图操作的低级控制,包括轮廓图形路径和透明图形路径。
  • 支持文本和图像水印,但需要额外的代码进行转换。
  • 兼容 .NET Framework 和 .NET Core(通过 PDFSharpCore)。
  • 缺乏内置高级水印功能,需要开发人员手动实现诸如不透明度和旋转之类的功能。

使用IronPDF添加水印

IronPDF 提供一个简单的 API,使开发人员能够仅用几行代码高效地应用水印,轻松高效地简化 PDF 水印任务,无需任何复杂或手动设置。 IronPDF 的水印工具可以使用 HTML/CSS 字符串作为水印,如下所示,这让您可以完全控制水印的显示方式。

文本水印示例

using IronPdf;
const string filename = "existing.pdf";
PdfDocument pdf = PdfDocument.FromFile(filename);
string watermark = "<h1 style='color:red'>Confidential!</h1>";
pdf.ApplyWatermark(watermark);
pdf.SaveAs("watermarked.pdf");
using IronPdf;
const string filename = "existing.pdf";
PdfDocument pdf = PdfDocument.FromFile(filename);
string watermark = "<h1 style='color:red'>Confidential!</h1>";
pdf.ApplyWatermark(watermark);
pdf.SaveAs("watermarked.pdf");
Imports IronPdf
Private Const filename As String = "existing.pdf"
Private pdf As PdfDocument = PdfDocument.FromFile(filename)
Private watermark As String = "<h1 style='color:red'>Confidential!</h1>"
pdf.ApplyWatermark(watermark)
pdf.SaveAs("watermarked.pdf")
$vbLabelText   $csharpLabel

探索 PDFsharp 添加水印到 PDF 的最佳替代方案:图 3 - 文本水印输出

在这个代码示例中,我们可以看到使用IronPDF为现有PDF文件添加水印是多么简单。 在这里,我们使用FromFile方法加载了现有的PDF。 然后,我们创建一个简单的字符串格式水印,并使用ApplyWatermark将其应用到PDF上。 如您在输出图像中所见,这已在我们的PDF上添加了“Confidential”作为水印的简单文本字符串。

图像水印示例

using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("existing.pdf");
string watermark = "<img src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>";
pdf.ApplyWatermark(watermark, rotation: 45, opacity: 80);
pdf.SaveAs("watermarked.pdf");
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("existing.pdf");
string watermark = "<img src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>";
pdf.ApplyWatermark(watermark, rotation: 45, opacity: 80);
pdf.SaveAs("watermarked.pdf");
Imports IronPdf
Private pdf As PdfDocument = PdfDocument.FromFile("existing.pdf")
Private watermark As String = "<img src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>"
pdf.ApplyWatermark(watermark, rotation:= 45, opacity:= 80)
pdf.SaveAs("watermarked.pdf")
$vbLabelText   $csharpLabel

探索用于PDFsharp添加水印至PDF的最佳替代方案:图4

添加图像作为水印与添加文字一样简单,因为它们都使用相同的方法。 就像在文本示例中,我们只是创建一个新的水印字符串变量,包含我们想用作水印的内容(在这种情况下是我们的图像),然后像之前一样应用它。 这次,我们增加了自定义旋转变换和不透明度。

这种方法将图像水印叠加在指定位置,允许自定义位置和透明度。

使用PDFsharp添加水印

PDFsharp 需要开发人员使用其 GDI+ 绘图 API 手动渲染文本和图像。 要给现有的PDF文件加水印,创建一个用于绘制的XGraphics对象并应用所需的内容。

文本水印示例

using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.IO;
const string filename = "existing.pdf";
var document = PdfReader.Open(filename, PdfDocumentOpenMode.Modify);
foreach (var page in document.Pages)
{
    var gfx = XGraphics.FromPdfPage(page); // get an XGraphics object
    gfx.TranslateTransform(page.Width / 2, page.Height / 2);
    gfx.RotateTransform(Math.Atan(page.Height / page.Width)); // Rotate for diagonal watermark
    var font = new XFont("Arial", 40);
    var brush = new XSolidBrush(XColor.FromArgb(128, XColors.Red));
    gfx.DrawString("WATERMARK", font, brush, new XPoint(0, 0)); // Drawing beneath the existing content
}
document.Save("watermarked.pdf");
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.IO;
const string filename = "existing.pdf";
var document = PdfReader.Open(filename, PdfDocumentOpenMode.Modify);
foreach (var page in document.Pages)
{
    var gfx = XGraphics.FromPdfPage(page); // get an XGraphics object
    gfx.TranslateTransform(page.Width / 2, page.Height / 2);
    gfx.RotateTransform(Math.Atan(page.Height / page.Width)); // Rotate for diagonal watermark
    var font = new XFont("Arial", 40);
    var brush = new XSolidBrush(XColor.FromArgb(128, XColors.Red));
    gfx.DrawString("WATERMARK", font, brush, new XPoint(0, 0)); // Drawing beneath the existing content
}
document.Save("watermarked.pdf");
Imports PdfSharp.Pdf
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf.IO
Private Const filename As String = "existing.pdf"
Private document = PdfReader.Open(filename, PdfDocumentOpenMode.Modify)
For Each page In document.Pages
	Dim gfx = XGraphics.FromPdfPage(page) ' get an XGraphics object
	gfx.TranslateTransform(page.Width \ 2, page.Height \ 2)
	gfx.RotateTransform(Math.Atan(page.Height \ page.Width)) ' Rotate for diagonal watermark
	Dim font = New XFont("Arial", 40)
	Dim brush = New XSolidBrush(XColor.FromArgb(128, XColors.Red))
	gfx.DrawString("WATERMARK", font, brush, New XPoint(0, 0)) ' Drawing beneath the existing content
Next page
document.Save("watermarked.pdf")
$vbLabelText   $csharpLabel

破损图片 添加自 Pixabay,请从您的文件中选择或将图片拖放到此处。

此实现手动在每一页上绘制水印,需要精确定位和自定义。 虽然它能够以类似于IronPDF示例的输出处理任务,但PDFsharp需要更多的代码,并且方法更复杂,以处理将文本水印应用于现有内容或新PDF文件。

图像水印示例

using PdfSharp.Pdf;
using PdfSharp.Drawing;
var document = PdfReader.Open("sample.pdf", PdfDocumentOpenMode.Modify);
XImage watermark = XImage.FromFile("watermark.png");
foreach (var page in document.Pages)
{
    XGraphics gfx = XGraphics.FromPdfPage(page);
    gfx.DrawImage(watermark, 50, 100, watermark.PixelWidth / 2, watermark.PixelHeight / 2);
}
document.Save("watermarked.pdf");
using PdfSharp.Pdf;
using PdfSharp.Drawing;
var document = PdfReader.Open("sample.pdf", PdfDocumentOpenMode.Modify);
XImage watermark = XImage.FromFile("watermark.png");
foreach (var page in document.Pages)
{
    XGraphics gfx = XGraphics.FromPdfPage(page);
    gfx.DrawImage(watermark, 50, 100, watermark.PixelWidth / 2, watermark.PixelHeight / 2);
}
document.Save("watermarked.pdf");
Imports PdfSharp.Pdf
Imports PdfSharp.Drawing
Private document = PdfReader.Open("sample.pdf", PdfDocumentOpenMode.Modify)
Private watermark As XImage = XImage.FromFile("watermark.png")
For Each page In document.Pages
	Dim gfx As XGraphics = XGraphics.FromPdfPage(page)
'INSTANT VB WARNING: Instant VB cannot determine whether both operands of this division are integer types - if they are then you should use the VB integer division operator:
	gfx.DrawImage(watermark, 50, 100, watermark.PixelWidth / 2, watermark.PixelHeight / 2)
Next page
document.Save("watermarked.pdf")
$vbLabelText   $csharpLabel

探索PDFsharp添加水印到PDF的最佳替代方案:图6

此方法会放置图片水印,但与IronPDF不同,不透明度必须单独处理。 与文本水印示例类似,利用PDFsharp在现有PDF上应用基于图像的水印需要更复杂和精细的设置,而IronPDF的水印API则简化了这一过程。

比较 IronPDF 和 PDFsharp 的水印功能

易用性

  • IronPDF:提供简化水印的高级功能,只需极少的代码。 它抽象出复杂的操作,使其成为需要快速高效解决方案的开发者的理想选择。
  • PDFSharp:需要使用图形API手动实现,这增加了复杂性和开发时间。它更适合需要对渲染进行精细控制但对额外编码感到舒适的开发人员。

性能

  • IronPDF: 为高速 PDF 处理进行了优化,能够高效处理大型文档而不会显著影响性能。
  • PDFSharp:虽然轻量,但处理大型PDF时可能需要额外的优化。 与IronPDF相比,具有多重转换的复杂水印任务可能导致性能较慢。

定制选项

  • IronPDF:内置支持不透明度、旋转、定位和字体大小自定义。 用户可以轻松调整设置,而无需深入研究复杂的渲染逻辑。
  • PDFSharp:需要额外的编码来处理不透明度、透明效果和变换处理。 虽然功能强大,但它要求开发人员进行更高级别的自定义,包括使用 var 格式进行特定的渲染任务。

兼容性

  • IronPDF:完全兼容 .NET 6+、.NET Core 和 .NET Framework,适用于现代和传统应用程序。
  • PDFSharp:支持 .NET Framework 和 .NET Core (通过 PDFSharpCore),但可能缺乏某些在新框架中可用的现代功能。

许可和成本

  • IronPDF:一个商业产品,需要付费许可证,但包括永久许可选项、客户支持和持续更新。
  • PDFSharp:开源且免费使用,为那些喜欢不受限制的许可模式,但愿意自己处理支持和更新的开发人员提供了一个具有成本效益的解决方案。

结论

探索 PDFsharp 添加水印到 PDF 的最佳替代方案:图 7

对于需要一种简单高效方法来为PDF添加水印的开发人员而言,IronPDF 是首选,因其用户友好的API和内置功能。 然而,如果预算限制是一个问题并且您不介意编写额外的代码,PDFSharp 是一个不错的开源替代方案。最终,最佳选择取决于您的项目需求、编程专业知识和可用资源。

🚀通过下载免费试用版亲自体验IronPDF,探索如何将您的C# PDF项目提升到一个新的水平!

Kannaopat Udonpant
坎那帕·乌东攀
软件工程师
在成为软件工程师之前,Kannapat 从日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了生物生产工程系车辆机器人实验室的成员。2022年,他利用自己的 C# 技能加入了 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他能直接向编写 IronPDF 大部分代码的开发者学习。除了同伴学习,Kannapat 还享受在 Iron Software 工作的社交方面。不写代码或文档时,Kannapat 通常在 PS5 上玩游戏或重看《最后生还者》。
< 前一页
探索适用于 .NET 的 QuestPDF 水印最佳替代方案
下一步 >
探索在.NET中将图像添加到PDF的最佳替代方案