Adding text watermarks

Following code snippet shows how to add text watermark to a document. If the document consists of multiple parts (pages, worksheets, slides, frames etc), the watermark will be added to all of them.

advanced_usage.adding_text_watermarks.AddTextWatermark

// Constants.InImagePng is an absolute or relative path to your document. Ex: "C:\\Docs\\image.png"
Watermarker watermarker = new Watermarker(Constants.InImagePng);                                   
                                                                                                   
// Initialize the font to be used for watermark                                                    
Font font = new Font("Arial", 19, FontStyle.Bold | FontStyle.Italic);                              
                                                                                                   
// Create the watermark object                                                                     
TextWatermark watermark = new TextWatermark("Test watermark", font);                               
                                                                                                   
// Set watermark properties                                                                        
watermark.setForegroundColor(Color.getRed());                                                      
watermark.setBackgroundColor(Color.getBlue());                                                     
watermark.setTextAlignment(TextAlignment.Right);                                                   
watermark.setOpacity(0.5);                                                                         
                                                                                                   
// Add watermark                                                                                   
watermarker.add(watermark);                                                                        
                                                                                                   
watermarker.save(Constants.OutImagePng);                                                           
                                                                                                   
watermarker.close();                                                                             

Sizing and positioning of watermark

Absolute watermark positioning

Using GroupDocs.Watermark, you can also add watermark to some absolute position in the document. Following example shows how to add a text watermark with absolute positioning using methods setX, setY, setWidth and setHeight. The values of all properties for absolute sizing and positioning are measured in default document units.

advanced_usage.adding_text_watermarks.AddWatermarkToAbsolutePosition

// Constants.InImagePng is an absolute or relative path to your document. Ex: "C:\\Docs\\image.png"
Watermarker watermarker = new Watermarker(Constants.InImagePng);                                   
                                                                                                   
Font font = new Font("Times New Roman", 8);                                                        
TextWatermark watermark = new TextWatermark("Test watermark", font);                               
                                                                                                   
// Set watermark coordinates                                                                       
watermark.setX(10);                                                                                
watermark.setY(20);                                                                                
                                                                                                   
// Set watermark size                                                                              
watermark.setWidth(100);                                                                           
watermark.setHeight(40);                                                                           
                                                                                                   
watermarker.add(watermark);                                                                        
watermarker.save(Constants.OutImagePng);                                                           
                                                                                                   
watermarker.close();                                                                             

Following are the origin of the coordinates for different formats of the documents.

Document FormatUnit of MeasureOrigin of Coordinates
PDFPointLeft bottom corner of page
WordProcessingPointLeft top corner of page 
SpreadsheetPointLeft top corner of worksheet 
PresentationPointLeft top corner of slide 
ImagePixelLeft top corner of image (frame) 
DiagramPointLeft top corner of page

Relative watermark positioning 

Instead of exact coordinates, you can also use parent relative alignment. Furthermore, you can also set offset from parent’s borders by using Margins property as shown in below example. Following example shows how to align the watermark vertically and horizontally.

advanced_usage.adding_text_watermarks.AddWatermarkToRelativePosition

// Constants.InImagePng is an absolute or relative path to your document. Ex: "C:\\Docs\\image.png
Watermarker watermarker = new Watermarker(Constants.InImagePng);                                  
                                                                                                  
Font font = new Font("Calibri", 12);                                                              
TextWatermark watermark = new TextWatermark("Test watermark", font);                              
watermark.setHorizontalAlignment(HorizontalAlignment.Right);                                      
watermark.setVerticalAlignment(VerticalAlignment.Bottom);                                         
                                                                                                  
// Set absolute margins. Values are measured in document units.                                   
watermark.getMargins().setRight(10);                                                              
watermark.getMargins().setBottom(5);                                                              
                                                                                                  
watermarker.add(watermark);                                                                       
watermarker.save(Constants.OutImagePng);                                                          
                                                                                                  
watermarker.close();                                                                            

Using setMarginType

In the example above, absolute margin values are used. This means that margins are measured in document units. But you can set relative margins for a watermark as well (as shown in below example).

advanced_usage.adding_text_watermarks.AddWatermarkWithMarginType

// Constants.InImagePng is an absolute or relative path to your document. Ex: "C:\\Docs\\image.png"
Watermarker watermarker = new Watermarker(Constants.InImagePng);                                   
                                                                                                   
Font font = new Font("Calibri", 12);                                                               
TextWatermark watermark = new TextWatermark("Test watermark", font);                               
watermark.setHorizontalAlignment(HorizontalAlignment.Right);                                       
watermark.setVerticalAlignment(VerticalAlignment.Bottom);                                          
                                                                                                   
// Set relative margins. Margin value will be interpreted as a portion                             
// of appropriate parent dimension. If this type is chosen, margin value                           
// must be between 0.0 and 1.0.                                                                    
watermark.getMargins().setMarginType(MarginType.RelativeToParentDimensions);                       
watermark.getMargins().setRight(0.1);                                                              
watermark.getMargins().setBottom(0.2);                                                             
                                                                                                   
watermarker.add(watermark);                                                                        
watermarker.save(Constants.OutImagePng);                                                           
                                                                                                   
watermarker.close();                                                                             

Size types

In most cases, to add good looking watermark, you should consider the size of the page/slide/frame on which it will be placed. setSizingType and setScaleFactor methods can be used to scale the watermark depending on the parent size.

advanced_usage.adding_text_watermarks.AddWatermarkWithSizeType

// Constants.InImagePng is an absolute or relative path to your document. Ex: "C:\\Docs\\image.png"
Watermarker watermarker = new Watermarker(Constants.InImagePng);                                   
                                                                                                   
Font font = new Font("Calibri", 12);                                                               
TextWatermark watermark = new TextWatermark("This is a test watermark", font);                     
                                                                                                   
// Set sizing type                                                                                 
watermark.setSizingType(SizingType.ScaleToParentDimensions);                                       
                                                                                                   
// Set watermark scale                                                                             
watermark.setScaleFactor(0.5);                                                                     
                                                                                                   
watermarker.add(watermark);                                                                        
watermarker.save(Constants.OutImagePng);                                                           
                                                                                                   
watermarker.close();                                                                             

Watermark rotation

GroupDocs.Watermark API also supports rotation of the watermark. You can use setRotateAngle method to define watermark rotation angle in degrees. A positive value means clockwise rotation.

advanced_usage.adding_text_watermarks.AddTextWatermarkWithRotationAngle

// Constants.InTestDocx is an absolute or relative path to your document. Ex: "C:\\Docs\\test.docx"
Watermarker watermarker = new Watermarker(Constants.InTestDocx);                                   
                                                                                                   
Font font = new Font("Calibri", 8);                                                                
TextWatermark watermark = new TextWatermark("Test watermark", font);                               
watermark.setHorizontalAlignment(HorizontalAlignment.Right);                                       
watermark.setVerticalAlignment(VerticalAlignment.Top);                                             
watermark.setSizingType(SizingType.ScaleToParentDimensions);                                       
watermark.setScaleFactor(0.5);                                                                     
                                                                                                   
// Set rotation angle                                                                              
watermark.setRotateAngle(45);                                                                      
                                                                                                   
watermarker.add(watermark);                                                                        
watermarker.save(Constants.OutTestDocx);                                                           
                                                                                                   
watermarker.close();                                                                             

If rotation angle is set, it is assumed that watermark size is equal to axis-aligned bounding box size. The following picture illustrates what is the watermark bounding box and how it is used for sizing and positioning. The picture shows a result of execution of the above code snippet. The actual watermark bounds are colored in blue and the bounding box is colored in red. As you can see, the bounding box size is used to calculate watermark relative size.

Considering parent margins

For most document formats you can set page margins when working with a document. By default, GroupDocs.Watermark ignores document margins and uses maximum available space for watermarking as shown in below image.

As you can see, the watermark goes beyond page margins. To change this behavior, call setConsiderParentMargins method with true (as shown in below example).

advanced_usage.adding_text_watermarks.AddWatermarkWithParentMargin

// Constants.InInputVsdx is an absolute or relative path to your document. Ex: "C:\\Docs\\input.vsdx"
Watermarker watermarker = new Watermarker(Constants.InInputVsdx);                                    
                                                                                                     
TextWatermark watermark = new TextWatermark("Test watermark", new Font("Arial", 42));                
watermark.setHorizontalAlignment(HorizontalAlignment.Right);                                         
watermark.setVerticalAlignment(VerticalAlignment.Top);                                               
watermark.setSizingType(SizingType.ScaleToParentDimensions);                                         
watermark.setScaleFactor(1);                                                                         
watermark.setRotateAngle(45);                                                                        
watermark.setForegroundColor(Color.getRed());                                                        
watermark.setBackgroundColor(Color.getAqua());                                                       
                                                                                                     
// Add watermark considering parent margins                                                          
watermark.setConsiderParentMargins(true);                                                            
                                                                                                     
watermarker.add(watermark);                                                                          
watermarker.save(Constants.OutInputVsdx);                                                            
                                                                                                     
watermarker.close();                                                                               

Now, the watermark is aligned with respect to page margins.

Watermark in documents of different types

Watermarks in documents of different types are represented by different objects. Some of these objects do not support some watermark properties. For example, the background color can not be set for WordArt object which is used as text watermark in a Word document. The full list of supported properties for all document types is available at Features Overview.

More resources

GitHub examples

You may easily run the code above and see the feature in action in our GitHub examples:

Free online document watermarking App

Along with full featured Java library we provide simple, but powerful free Apps.

You are welcome to add watermark to PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX, Emails and more with our free online Free Online Document Watermarking App.