Skip to content

Instantly share code, notes, and snippets.

@warrengalyen
Created February 15, 2018 15:40
Show Gist options
  • Save warrengalyen/56a0af9e6cf5139c5a03fa63bd4ceccd to your computer and use it in GitHub Desktop.
Save warrengalyen/56a0af9e6cf5139c5a03fa63bd4ceccd to your computer and use it in GitHub Desktop.
Add text watermark to PDF using iTextSharp
using iTextSharp.text;
using iTextSharp.text.pdf;
/// <summary>
/// This method adds watermark text under pdf content
/// </summary>
/// <param name="pdfData">pdf content bytes</param>
/// <param name="watermarkText">text to be shown as watermark</param>
/// <param name="font">base font</param>
/// <param name="fontSize">font sieze</param>
/// <param name="angle">angle at which watermark needs to be shown</param>
/// <param name="color">water mark color</param>
/// <param name="realPageSize">pdf page size</param>
public static void AddWaterMarkText(PdfContentByte pdfData, string watermarkText, BaseFont font, float fontSize, float angle, BaseColor color, Rectangle realPageSize)
{
var gstate = new PdfGState {FillOpacity = 0.35f, StrokeOpacity = 0.3f};
pdfData.SaveState();
pdfData.SetGState(gstate);
pdfData.SetColorFill(color);
pdfData.BeginText();
pdfData.SetFontAndSize(font, fontSize);
var x = (realPageSize.Right + realPageSize.Left)/2;
var y = (realPageSize.Bottom + realPageSize.Top)/2;
pdfData.ShowTextAligned(Element.ALIGN_CENTER, watermarkText, x, y, angle);
pdfData.EndText();
pdfData.RestoreState();
}
// <summary>
/// This method calls another method to add watermark text for each page
/// </summary>
/// <param name="bytes">byte array of Pdf</param>
/// <param name="baseFont">Base font</param>
/// <param name="watermarkText">Text to be added as watermark</param>
/// <returns>Pdf bytes array having watermark added</returns>
private static byte[] AddWatermark(byte[] bytes, BaseFont baseFont, string watermarkText)
{
using (var ms = new MemoryStream(10 * 1024))
{
using (var reader = new PdfReader(bytes))
using (var stamper = new PdfStamper(reader, ms))
{
var pages = reader.NumberOfPages;
for (var i = 1; i <= pages; i++)
{
var dc = stamper.GetOverContent(i);
AddWaterMarkText(dc, watermarkText, baseFont, 50, 45, BaseColor.GRAY, reader.GetPageSizeWithRotation(i));
}
stamper.Close();
}
return ms.ToArray();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment