Subscribe to News feed

Watermarking PDF Documents using a SharePoint Designer Workflow - Part 2

Posted at: 9:22 AM on 25 October 2010 by Muhimbi

confidential4

Note that this post was originally written to show how to use the XML based watermarking syntax from a SharePoint Designer workflow. However, the same syntax can be used from our Nintex Workflow Activity as well as the Automatic Watermarking Facilities.

The Muhimbi PDF Converter for SharePoint contains a powerful watermarking engine that can be used to add watermarks to pages as well as adding headers, footers, page numbering and other recurring items. Multiple watermarks can be applied to the same page and watermarks can be applied to page ranges, page intervals or certain page types such as portrait or landscape.

In part 1 of this series I showed how simple watermarks can be added, one at a time, to a PDF file using a simple SharePoint Designer Workflow Action.  The disadvantage to this approach is that if you wish to combine multiple different shapes, e.g. a Circle, an Image and some dynamic text, then a separate watermarking cycle is carried out internally for each shape. This works well and will be fast enough for most occasions, but it is not the most efficient way to do it.

The separate Add Composite Watermark to PDF workflow action allows multiple watermarks to be applied in one go with each watermark made up of 1 or more individual shapes.

The workflow parameters are as follows:

Composite WM Action


The real power comes as part of the watermark.xml field that stores the XML that describes the multiple watermarks and elements. The XML for each individual shape is described below, but before we go into more details let’s start with an example.

The following sample code describes three watermarks.

  • The first adds an image of the company logo (in the foreground) to the top right of each page in the document.
     
  • The second adds the login-id of the user who created / changed the document to a random location in the background in a semi-transparent way.
     
  • The third adds an automatically generated page number to the bottom right of each page.

If you wish to run this example then please make sure the imageFilePath attribute is updated to a file on your system.

 

<watermarks>

  <!-- ** First watermark contains a single image element with the logo -->
  <watermark 
    hPosition="right" 
    vPosition="top" 
    width="200"
    height="73"
    zOrder="1"
    opacity="100"
    pageOrientation="both">
    <image
      width="200"
      height="73"
      scaleMode="maintainaspectratio"
      imageFilePath="watermarking/muhimbi-logo.gif"/>
  </watermark>

  <!-- ** Second watermark places the user's name in the background -->
  <watermark 
    hPosition="random" 
    vPosition="random" 
    width="300"
    height="200"
    zOrder="-1"
    rotation="-30"
    opacity="15"
    pageOrientation="both">
    <text
      width="200"
      height="200"
      fillColor="#000000"
      content="Insert 'modified by' field using SharePoint Designer"
      fontFamilyName="Times New Roman"
      fontSize="24"
      fontStyle="bold|italic"
      wordWrap="word"
      />
  </watermark>

  <!-- ** Third watermark adds page numbering -->
  <watermark 
    hPosition="right" 
    vPosition="bottom" 
    width="100"
    height="40"
    zOrder="1"
    pageOrientation="both">
    <text
      hPosition="left"
      vPosition="top"
      width="100"
      height="40"
      content="Page {PAGE} of {NUMPAGES}"
      fontFamilyName="Arial"
      fontSize="11"
      hAlign="left"
      vAlign="top"
      />
  </watermark>

</watermarks>

 

Watermark element
 

As the previous example shows, the watermarks element may contain multiple watermark elements. This watermark element again can contain one or more individual shapes such as text and images.

The watermark element acts as a container that determines where the watermark will be located, on which pages, before or behind the text, opacity as well as which page orientations the watermark applies to.

The XML looks as follows (Please omit any attributes marked as optional from your code when they are not needed. Leaving them in with the ‘optional’ text will cause an error.)

<watermark 
    hPosition="optional (absolute, random, left, center, right)" 
    vPosition="optional (absolute, random, top, middle, bottom)" 
    x="optional" 
    y="optional"
    width="required"
    height="required"
    zOrder="optional"
    scaleMode="optional (absolute, exactFit, maintainaspectratio)"
    scaleX="optional"
    scaleY="optional"
    rotation="optional"
    opacity="optional"
    pageOrientation="optional (portrait, landscape, both)"
    startPage="optional"
    endPage="optional"
    pageInterval="optional"
    pageRange="optional">

 

Text element
 

This watermark can be used to apply text to the foreground or background of one or more pages in the PDF file with full control over the font, style, size and color.

The XML looks as follows (Please omit any attributes marked as optional from your code when they are not needed. Leaving them in with the ‘optional’ text will cause an error.)

  <text
      hPosition="optional (absolute, random, left, center, right)"
      vPosition="optional (absolute, random, top, middle, bottom)"
      x="optional"
      y="optional"
      width="required"
      height="required"
      zOrder="optional"
      scaleMode="optional (absolute, exactFit, maintainaspectratio)"
      scaleX="optional"
      scaleY="optional"
      rotation="optional"
      opacity="optional"
      lineColor="optional"
      lineWidth="optional"
      fillColor="optional"
      content="required"
      fontFamilyName="optional"
      fontSize="optional"
      fontStyle="optional (regular, bold, italic, strikeout, underline)"
      wordWrap="optional (none, character, word, wordonly)"
      hAlign="optional (left, center, right, justify)"
      vAlign="optional (top, middle, bottom)"
      />


The text stored in the content attribute may contain embedded field codes such as the date or current page number. For details see section 5.5 Embedding field codes in the Text element of the User Guide.

When a lot of content is anticipated then you may want to remove the content attribute and instead place it inside the text element, for example:

  <text
      hPosition="optional (absolute, random, left, center, right)"
      ... rest omitted
      >
         Your content goes here, use a CDATA section if needed.
  </text>


SharePoint Designer lookup variables are also supported, which makes it possible for dynamic information stored in workflow variables, or in the Item’s columns, to be embedded in the watermark.

 

RTF element
 

The RTF watermark allows simple RTF encoded text to be added as a watermark. This allows more control over the look and feel of individual words in the watermark at the cost of added complexity.

An example of valid RTF is as follows:

{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard
This is some {\b bold} text.\par
}

The XML looks as follows (Please omit any attributes marked as optional from your code when they are not needed. Leaving them in with the ‘optional’ text will cause an error.)

<rtf
      hPosition="optional (absolute, random, left, center, right)"
      vPosition="optional (absolute, random, top, middle, bottom)"
      x="optional"
      y="optional"
      width="required"
      height="required"
      zOrder="optional"
      scaleMode="optional (absolute, exactFit, maintainaspectratio)"
      scaleX="optional"
      scaleY="optional"
      rotation="optional"
      opacity="optional"
      lineColor="optional"
      lineWidth="optional"
      fillColor="optional"
      rtfData="required"/>

When a lot of content is anticipated then you may want to remove the rtfData attribute and instead place it inside the rtf element, for example:

  <rtf
      hPosition="optional (absolute, random, left, center, right)"
      ... rest omitted
      >
      Your content goes here, use a CDATA section if needed.
  </rtf>

Note that unlike the Text watermark, the RTF watermark does not support embedded Muhimbi field codes. However, SharePoint Designer lookup variables are fully supported to make it possible for dynamic information stored in workflow variables, or in the Item’s columns, to be embedded in the watermark.

 

Image element
 

Use the Image watermark to add common image types (BMP, JPG, GIF, PNG, TIFF, WMF, EMF / EMF+) as a watermark to a PDF document.

The XML looks as follows (Please omit any attributes marked as optional from your code when they are not needed. Leaving them in with the ‘optional’ text will cause an error.)

<image
      hPosition="optional (absolute, random, left, center, right)"
      vPosition="optional (absolute, random, top, middle, bottom)"
      x="optional"
      y="optional"
      width="optional"
      height="optional"
      zOrder="optional"
      scaleMode="optional (absolute, exactFit, maintainaspectratio)"
      scaleX="optional"
      scaleY="optional"
      rotation="optional"
      opacity="optional"
      lineColor="optional"
      lineWidth="optional"
      fillColor="optional"
      imageFilePath="required"/>

The image at this path parameter expects the full path of the image relative to the current site, e.g. ‘shared documents/images/company_logo.gif’.

 

QRCode element
 

A range of different QR Codes can be added to documents using watermarks, ideal for embedding the document ID, or any kind of other SharePoint meta-data.

The XML looks as follows (Please omit any attributes marked as optional from your code when they are not needed. Leaving them in with the ‘optional’ text will cause an error.

 <qrcode
      hPosition="optional (absolute, random, left, center, right)" 
      vPosition="optional (absolute, random, top, middle, bottom)" 
      x="optional" 
      y="optional" 
      width="optional" 
      height="optional" 
      zOrder="optional"       
      rotation="optional" 
      opacity="optional" 
      fillColor="#optional"
      lineColor="#optional"
      text="required"
      errorCorrectionLevel="optional (Low, Medium, Quartile, High)"
      inputMode="required (Binary, AlphaNumeric, Numeric)"
      version="optional (Auto, Version01, Version02, Version03 ... Version40)"
      />

 

PDF element
 

Existing PDF files can also be used as a watermark. This could be a dynamic file that is generated from, for example MS-Word, and then converted to PDF using the Muhimbi PDF Converter. Alternatively this could be a static PDF file that has been generated manually.

The XML looks as follows (Please omit any attributes marked as optional from your code when they are not needed. Leaving them in with the ‘optional’ text will cause an error.)

<pdf
      hPosition="optional (absolute, random, left, center, right)"
      vPosition="optional (absolute, random, top, middle, bottom)"
      x="optional"
      y="optional"
      width="optional"
      height="optional"
      zOrder="optional"
      scaleMode="optional (absolute, exactFit, maintainaspectratio)"
      scaleX="optional"
      scaleY="optional"
      rotation="optional"
      opacity="optional"
      lineColor="optional"
      lineWidth="optional"
      fillColor="optional"
      pdfFilePath="required"/>

The pdf file path parameter expects the full path of the PDF name relative to the current site, e.g. ‘shared documents/static watermarks/company_logo.pdf’.

 

Rectangle element
 

A simple rectangle can be added as a watermark. The XML looks as follows (Please omit any attributes marked as optional from your code when they are not needed. Leaving them in with the ‘optional’ text will cause an error.)

<rectangle
      hPosition="optional (absolute, random, left, center, right)"
      vPosition="optional (absolute, random, top, middle, bottom)"
      x="optional"
      y="optional"
      width="required"
      height="required"
      zOrder="optional"
      scaleMode="optional (absolute, exactFit, maintainaspectratio)"
      scaleX="optional"
      scaleY="optional"
      rotation="optional"
      opacity="optional"
      lineColor="optional"
      lineWidth="optional"
      fillColor="optional"/>

 

Line element
 

A line can be added as a watermark. The XML looks as follows (Please omit any attributes marked as optional from your code when they are not needed. Leaving them in with the ‘optional’ text will cause an error.)

<line
      hPosition="optional (absolute, random, left, center, right)"
      vPosition="optional (absolute, random, top, middle, bottom)"
      x="required"
      y="required"
      endX="required"
      endY="required"
      zOrder="optional"
      scaleMode="optional (absolute, exactFit, maintainaspectratio)"
      scaleX="optional"
      scaleY="optional"
      rotation="optional"
      opacity="optional"
      lineColor="optional"
      lineWidth="optional"/>
 
 
 
Ellipse element
 

A circle or ellipse can be added as a watermark. (Please omit any attributes marked as optional from your code when they are not needed. Leaving them in with the ‘optional’ text will cause an error.)

<ellipse
      hPosition="optional (absolute, random, left, center, right)"
      vPosition="optional (absolute, random, top, middle, bottom)"
      x="optional"
      y="optional"
      width="required"
      height="required"
      zOrder="optional"
      scaleMode="optional (absolute, exactFit, maintainaspectratio)"
      scaleX="optional"
      scaleY="optional"
      rotation="optional"
      opacity="optional"
      lineColor="optional"
      lineWidth="optional"
      fillColor="optional"/>

.




Labels: , , , ,

2 Comments:

  • Hi
    when I try to use the example, I get the following error in SharePoint Log:

    1401250023430 - Muhimbi PDF Converter System.Exception: An error occurred while creating Watermarks from xml: The root node must be or . at ...

    What I have done is just deleting the first and third watermarkers the XML.
    Do you have an idea for this error?

    By Blogger Arash Alvandi, At 24 September, 2012 10:01  

  • Hi Arash,

    Please contact support@muhimbi.com with the full error message from the Windows Application Event Log (Event ID 41734) so we can deal with this properly.

    By Blogger Muhimbi, At 24 September, 2012 10:03  

Post a Comment

Subscribe to Post Comments [Atom]

Links to this post:

Create a Link

Need support from experts?

Access our Forum

Download Free Trials