Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c# itextsharp PDF creation with watermark on each page

Tags:

c#

pdf

itext

I am trying to programmatically create a number of PDF documents with a watermark on each page using itextsharp (a C# port of Java's itext).

I am able to do this after the document has been created using a PdfStamper. However this seems to involve re-opening the document reading it and then creating a new document with the watermark on each page.

Is there a way of doing this during document creation?

like image 790
tim harrison Avatar asked Mar 03 '10 14:03

tim harrison


1 Answers

After digging into it I found the best way was to add the watermark to each page as it was created. To do this I created a new class and implemented the IPdfPageEvent interface as follows:

    class PdfWriterEvents : IPdfPageEvent     {         string watermarkText = string.Empty;          public PdfWriterEvents(string watermark)          {             watermarkText = watermark;         }          public void OnOpenDocument(PdfWriter writer, Document document) { }         public void OnCloseDocument(PdfWriter writer, Document document) { }         public void OnStartPage(PdfWriter writer, Document document) {             float fontSize = 80;             float xPosition = 300;             float yPosition = 400;             float angle = 45;             try             {                 PdfContentByte under = writer.DirectContentUnder;                 BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);                 under.BeginText();                 under.SetColorFill(BaseColor.LIGHT_GRAY);                 under.SetFontAndSize(baseFont, fontSize);                 under.ShowTextAligned(PdfContentByte.ALIGN_CENTER, watermarkText, xPosition, yPosition, angle);                 under.EndText();             }             catch (Exception ex)             {                 Console.Error.WriteLine(ex.Message);             }         }         public void OnEndPage(PdfWriter writer, Document document) { }         public void OnParagraph(PdfWriter writer, Document document, float paragraphPosition) { }         public void OnParagraphEnd(PdfWriter writer, Document document, float paragraphPosition) { }         public void OnChapter(PdfWriter writer, Document document, float paragraphPosition, Paragraph title) { }         public void OnChapterEnd(PdfWriter writer, Document document, float paragraphPosition) { }         public void OnSection(PdfWriter writer, Document document, float paragraphPosition, int depth, Paragraph title) { }         public void OnSectionEnd(PdfWriter writer, Document document, float paragraphPosition) { }         public void OnGenericTag(PdfWriter writer, Document document, Rectangle rect, String text) { }      } } 

This object is registered to handle the events as follows:

PdfWriter docWriter = PdfWriter.GetInstance(document, new FileStream(outputLocation, FileMode.Create)); PdfWriterEvents writerEvent = new PdfWriterEvents(watermark); docWriter.PageEvent = writerEvent; 
like image 188
tim harrison Avatar answered Sep 17 '22 16:09

tim harrison