Test in production without watermarks.
Works wherever you need it to.
Get 30 days of fully functional product.
Have it up and running in minutes.
Full access to our support engineering team during your product trial
Watermarks serve as an essential element in PDF documents, providing a visual indication of ownership, authenticity, or confidentiality. They can deter unauthorized use and help protect intellectual property, making them crucial for businesses and individuals alike. In this article, we will compare two powerful libraries—IronPDF and QuestPDF—focusing on their capabilities for adding watermarks to PDF files in C#.
IronPDF is a robust PDF library that enables developers to create, edit, and manipulate PDF documents seamlessly. Key features related to watermarking include:
To get started with IronPDF, follow these steps:
Install the IronPDF NuGet package by running the following command in your Package Manager Console:
Install-Package IronPdf
Install-Package IronPdf
Add necessary namespaces in your C# file:
using IronPdf;
using IronPdf;
Imports IronPdf
IronPDF makes use of HTML string and CSS styling to add fully customizable watermarks to your PDF documents. The watermark tool can take any HTML string, even if it contains assets such as images and CSS styling, and apply it to the PDF file as a watermark.
using IronPdf;
class Program
{
static void Main()
{
// Load an existing PDF document.
PdfDocument pdf = PdfDocument.FromFile("existing.pdf");
// Define the watermark using HTML and CSS.
string watermark = "<img src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'><h1 style='color:red;'>CONFIDENTIAL</h1>";
// Apply the watermark with specified rotation and opacity.
pdf.ApplyWatermark(watermark, rotation: 45, opacity: 80);
// Save the watermarked document.
pdf.SaveAs("watermarked.pdf");
}
}
using IronPdf;
class Program
{
static void Main()
{
// Load an existing PDF document.
PdfDocument pdf = PdfDocument.FromFile("existing.pdf");
// Define the watermark using HTML and CSS.
string watermark = "<img src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'><h1 style='color:red;'>CONFIDENTIAL</h1>";
// Apply the watermark with specified rotation and opacity.
pdf.ApplyWatermark(watermark, rotation: 45, opacity: 80);
// Save the watermarked document.
pdf.SaveAs("watermarked.pdf");
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main()
' Load an existing PDF document.
Dim pdf As PdfDocument = PdfDocument.FromFile("existing.pdf")
' Define the watermark using HTML and CSS.
Dim watermark As String = "<img src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'><h1 style='color:red;'>CONFIDENTIAL</h1>"
' Apply the watermark with specified rotation and opacity.
pdf.ApplyWatermark(watermark, rotation:= 45, opacity:= 80)
' Save the watermarked document.
pdf.SaveAs("watermarked.pdf")
End Sub
End Class
As you can see, we have created a new string variable containing our watermark content. This is made up of an HTML string with a header and image. When we use the ApplyWatermark method, we are able to set a customized rotation and opacity.
If you want to see more advanced examples and other features IronPDF has to offer, be sure to check out the How-To Guides!
QuestPDF is a modern PDF library that emphasizes ease of use and developer-friendly design. Key features related to watermarking include:
To install QuestPDF, follow these steps:
Install the QuestPDF NuGet package using the following command:
Install-Package QuestPDF
Install-Package QuestPDF
Include the necessary namespace in your C# file:
using QuestPDF;
using QuestPDF;
Imports QuestPDF
QuestPDF has a different approach to apply watermarks to PDF files. With QuestPDF, this is done through watermark slots (on the background and foreground) which are used to add watermark content to a specific page or all pages of the PDF.
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
public class WatermarkExample
{
public static void Main()
{
// Set the license type to Community for QuestPDF.
QuestPDF.Settings.License = LicenseType.Community;
// Create a PDF document with a defined structure.
Document.Create(container =>
{
container.Page(page =>
{
page.Margin(50);
// Add a foreground watermark.
page.Foreground().Element(watermark =>
{
watermark.Text("DRAFT")
.FontSize(40)
.FontColor(Colors.Red.Medium)
.AlignLeft();
});
// Add the main content of the page.
page.Content().Element(ComposeContent);
});
})
.GeneratePdf("watermarked_document.pdf");
}
private static IContainer ComposeContent(IContainer container)
{
// Define the layout and content of the PDF.
container.Column(column =>
{
column.Spacing(10);
column.Item().Text("This is the main content of the PDF.");
column.Item().Text("Add more content as needed.");
});
return container; // Return the container to maintain method signature.
}
}
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
public class WatermarkExample
{
public static void Main()
{
// Set the license type to Community for QuestPDF.
QuestPDF.Settings.License = LicenseType.Community;
// Create a PDF document with a defined structure.
Document.Create(container =>
{
container.Page(page =>
{
page.Margin(50);
// Add a foreground watermark.
page.Foreground().Element(watermark =>
{
watermark.Text("DRAFT")
.FontSize(40)
.FontColor(Colors.Red.Medium)
.AlignLeft();
});
// Add the main content of the page.
page.Content().Element(ComposeContent);
});
})
.GeneratePdf("watermarked_document.pdf");
}
private static IContainer ComposeContent(IContainer container)
{
// Define the layout and content of the PDF.
container.Column(column =>
{
column.Spacing(10);
column.Item().Text("This is the main content of the PDF.");
column.Item().Text("Add more content as needed.");
});
return container; // Return the container to maintain method signature.
}
}
Imports QuestPDF.Fluent
Imports QuestPDF.Helpers
Imports QuestPDF.Infrastructure
Public Class WatermarkExample
Public Shared Sub Main()
' Set the license type to Community for QuestPDF.
QuestPDF.Settings.License = LicenseType.Community
' Create a PDF document with a defined structure.
Document.Create(Sub(container)
container.Page(Sub(page)
page.Margin(50)
' Add a foreground watermark.
page.Foreground().Element(Sub(watermark)
watermark.Text("DRAFT").FontSize(40).FontColor(Colors.Red.Medium).AlignLeft()
End Sub)
' Add the main content of the page.
page.Content().Element(AddressOf ComposeContent)
End Sub)
End Sub).GeneratePdf("watermarked_document.pdf")
End Sub
Private Shared Function ComposeContent(ByVal container As IContainer) As IContainer
' Define the layout and content of the PDF.
container.Column(Sub(column)
column.Spacing(10)
column.Item().Text("This is the main content of the PDF.")
column.Item().Text("Add more content as needed.")
End Sub)
Return container ' Return the container to maintain method signature.
End Function
End Class
In the Main method, we start by creating a document with a page that has a 50-unit margin. We then create the watermark we want to use, which is the simple text "DRAFT" in red, styled with a font size of 40 and aligned to the left. This approach to applying watermarks to PDF documents is more rigid and complex in setup compared to IronPDF's streamlined approach. With QuestPDF, you may have less control over the appearance and location of the watermark.
IronPDF provides a straightforward approach with its rich documentation and examples, making it accessible for beginners. QuestPDF, with its declarative API, simplifies the process further by allowing for concise code, which can enhance productivity.
Both libraries offer extensive customization for watermarks. IronPDF allows for detailed styling of text and images, while QuestPDF provides a more flexible way to arrange elements and supports complex designs, making it suitable for creative applications.
In terms of performance, both libraries perform well, but QuestPDF may have the edge in speed due to its efficient design. Testing the libraries in real-world scenarios is advisable to determine which best fits your specific use case.
IronPDF operates on a commercial licensing model available.
QuestPDF offers an open-source license with the option for commercial support. This makes it a cost-effective choice for developers looking for robust functionality without a significant financial commitment.

Both IronPDF and QuestPDF are powerful libraries for adding watermarks to PDFs in C#. IronPDF excels in its detailed customization options and user-friendly approach, making it ideal for users who require specific formatting. QuestPDF, on the other hand, stands out with its modern API design and performance efficiency, appealing to developers seeking a quick and intuitive solution.
For scenarios where extensive customization is needed, IronPDF may be the preferred choice. Conversely, QuestPDF is well-suited for projects prioritizing speed and ease of use.
🚀Try IronPDF out for yourself by downloading the free trial and exploring how it can take your C# PDF projects to the next level today!
IronPDF offers flexible watermarking with text and image options, easy integration with .NET applications, rich formatting options, and conversion tools for various formats into PDFs.
Install the IronPDF NuGet package by running 'Install-Package IronPdf' in your Package Manager Console and add the necessary namespaces in your C# file.
IronPDF uses HTML string and CSS styling to add customizable watermarks to PDFs. You can define a watermark using HTML and apply it with specified rotation and opacity using the ApplyWatermark method.
QuestPDF offers a declarative API, high customizability with text, images, and shapes, and a performance focus optimized for speed and efficiency.
Install the QuestPDF NuGet package by using the command 'Install-Package QuestPDF' and include the necessary namespace in your C# file.
QuestPDF uses watermark slots to add content to specific pages or all pages of a PDF, allowing for text and other elements to be included as watermarks.
Both libraries offer extensive customization, but IronPDF allows detailed styling, whereas QuestPDF provides flexible element arrangement suitable for creative applications.
IronPDF operates on a commercial licensing model, with options available for developers needing robust functionality.
QuestPDF offers an open-source license with commercial support options, making it a cost-effective choice for developers.
QuestPDF may have the edge in speed due to its efficient design, making it suitable for projects where performance is a priority.