Add watermark to PDF using C#

Aspose.PDF for .NET allows adding watermarks to your PDF document using Artifacts. Please check this article to resolve your task.

The following code snippet also work with Aspose.PDF.Drawing library.

A watermark created with Adobe Acrobat is called an artifact (as described in 14.8.2.2 Real Content and Artifacts of the PDF specification). In order to work with artifacts, Aspose.PDF has two classes: Artifact and ArtifactCollection.

In order to get all artifacts on a particular page, the Page class has the Artifacts property. This topic explains how to work with artifact in PDF files.

Working with Artifacts

The Artifact class contains following properties:

  • Artifact.Type: gets the artifact type (supports values of the Artifact.ArtifactType enumeration where values include Background, Layout, Page, Pagination and Undefined).
  • Artifact.Subtype: gets artifact subtype (supports the values of the Artifact.ArtifactSubtype enumeration where values include Background, Footer, Header, Undefined, Watermark).
  • Artifact.Contents: Gets a collection of artifact internal operators. Its supported type is System.Collections.ICollection.
  • Artifact.Form: Gets an artifact’s XForm (if XForm is used). Watermarks, header, and footer artifacts contains XForm which shows all artifact contents.
  • Artifact.Image: Gets an artifact’s image (if an image is presents, else null).
  • Artifact.Text: Gets an artifact’s text.
  • Artifact.Rectangle: Gets an position of an artifact on the page.
  • Artifact.Rotation: Gets an artifact’s rotation (in degrees, positive value indicates counter-clockwise rotation).
  • Artifact.Opacity: Gets an artifact’s opacity. Possible values are in the range 0…1, where 1 is completely opaque.

How To Add Watermark On PDF Files

The following code snippet shows how to get each watermark on the first page of a PDF file with C#.

private static void AddWatermarks()
{
    var dataDir = RunExamples.GetDataDir_AsposePdf_Images();  // Dynamic path for data directory

    // Open document using 'using' block to ensure proper disposal
    using (var document = new Aspose.Pdf.Document(dataDir + "AddWatermarks.pdf"))
    {
        // Create a new watermark artifact
        var artifact = new Aspose.Pdf.WatermarkArtifact();
        artifact.SetTextAndState(
            "WATERMARK",
            new Aspose.Pdf.Text.TextState()
            {
                FontSize = 72,
                ForegroundColor = Aspose.Pdf.Color.Blue,
                Font = Aspose.Pdf.Text.FontRepository.FindFont("Courier")
            });

        // Set watermark properties
        artifact.ArtifactHorizontalAlignment = Aspose.Pdf.HorizontalAlignment.Center;
        artifact.ArtifactVerticalAlignment = Aspose.Pdf.VerticalAlignment.Center;
        artifact.Rotation = 45;
        artifact.Opacity = 0.5;
        artifact.IsBackground = true;

        // Add watermark artifact to the first page
        document.Pages[1].Artifacts.Add(artifact);

        // Save the updated document with '_out' suffix
        document.Save(dataDir + "AddWatermarks_out.pdf");
    }
}