Adding a text watermark.
Please refer to Part One of this series to see the Word document output and calling code.
The TextWatermark class is standard code to add a watermark in a diagonal line.
Also note that it is also possible to add an image watermark.
This is the calling code which takes the following parameters:
//// Add a text watermark TextWatermark textWatermark = new TextWatermark(); textWatermark.AddWatermark(wordDoc, "DRAFT", "font-family:\"Calibri\";font-size:medium", "#C0C0C0");
Below is the class to add a text watermark.
The watermark transparency effect is governed by the falling code:
//// Switches on the transparency
Fill fill1 = new Fill() { Opacity = ".5" };
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Vml;
using DocumentFormat.OpenXml.Vml.Office;
using DocumentFormat.OpenXml.Vml.Wordprocessing;
using DocumentFormat.OpenXml.Wordprocessing;
using HorizontalAnchorValues = DocumentFormat.OpenXml.Vml.Wordprocessing.HorizontalAnchorValues;
using Lock = DocumentFormat.OpenXml.Vml.Office.Lock;
using VerticalAnchorValues = DocumentFormat.OpenXml.Vml.Wordprocessing.VerticalAnchorValues;
namespace ExportToWord
{
public class TextWatermark
{
/// <summary>
/// Adds the watermark.
/// </summary>
/// <param name="doc">The document.</param>
/// <param name="watermarkText">The watermark text.</param>
/// <param name="watermarkStyle">The watermark style.</param>
/// <param name="watermarkFillColor">Color of the watermark fill.</param>
public void AddWatermark(WordprocessingDocument doc, string watermarkText, string watermarkStyle, string watermarkFillColor)
{
foreach (HeaderPart headerPart in doc.MainDocumentPart.HeaderParts)
{
SdtBlock sdtBlock1 = new SdtBlock();
SdtProperties sdtProperties1 = new SdtProperties();
SdtId sdtId1 = new SdtId() { Val = 87908844 };
SdtContentDocPartObject sdtContentDocPartObject1 = new SdtContentDocPartObject();
DocPartGallery docPartGallery1 = new DocPartGallery() { Val = "Watermarks" };
DocPartUnique docPartUnique1 = new DocPartUnique();
sdtContentDocPartObject1.Append(docPartGallery1);
sdtContentDocPartObject1.Append(docPartUnique1);
sdtProperties1.Append(sdtId1);
sdtProperties1.Append(sdtContentDocPartObject1);
SdtContentBlock sdtContentBlock1 = new SdtContentBlock();
Paragraph paragraph2 = new Paragraph()
{
RsidParagraphAddition = "00656E18",
RsidRunAdditionDefault = "00656E18"
};
ParagraphProperties paragraphProperties2 = new ParagraphProperties();
ParagraphStyleId paragraphStyleId2 = new ParagraphStyleId() { Val = "Header" };
paragraphProperties2.Append(paragraphStyleId2);
Run run1 = new Run();
RunProperties runProperties1 = new RunProperties();
NoProof noProof1 = new NoProof();
Languages languages1 = new Languages() { EastAsia = "zh-TW" };
runProperties1.Append(noProof1);
runProperties1.Append(languages1);
Picture picture1 = new Picture();
Shapetype shapetype1 = new Shapetype()
{
Id = "_x0000_t136",
CoordinateSize = "21600,21600",
OptionalNumber = 136,
Adjustment = "10800",
EdgePath = "m@7,l@8,m@5,21600l@6,21600e"
};
Formulas formulas1 = new Formulas();
Formula formula1 = new Formula() { Equation = "sum #0 0 10800" };
Formula formula2 = new Formula() { Equation = "prod #0 2 1" };
Formula formula3 = new Formula() { Equation = "sum 21600 0 @1" };
Formula formula4 = new Formula() { Equation = "sum 0 0 @2" };
Formula formula5 = new Formula() { Equation = "sum 21600 0 @3" };
Formula formula6 = new Formula() { Equation = "if @0 @3 0" };
Formula formula7 = new Formula() { Equation = "if @0 21600 @1" };
Formula formula8 = new Formula() { Equation = "if @0 0 @2" };
Formula formula9 = new Formula() { Equation = "if @0 @4 21600" };
Formula formula10 = new Formula() { Equation = "mid @5 @6" };
Formula formula11 = new Formula() { Equation = "mid @8 @5" };
Formula formula12 = new Formula() { Equation = "mid @7 @8" };
Formula formula13 = new Formula() { Equation = "mid @6 @7" };
Formula formula14 = new Formula() { Equation = "sum @6 0 @5" };
formulas1.Append(formula1);
formulas1.Append(formula2);
formulas1.Append(formula3);
formulas1.Append(formula4);
formulas1.Append(formula5);
formulas1.Append(formula6);
formulas1.Append(formula7);
formulas1.Append(formula8);
formulas1.Append(formula9);
formulas1.Append(formula10);
formulas1.Append(formula11);
formulas1.Append(formula12);
formulas1.Append(formula13);
formulas1.Append(formula14);
DocumentFormat.OpenXml.Vml.Path path1 = new DocumentFormat.OpenXml.Vml.Path()
{
AllowTextPath = true,
ConnectionPointType = ConnectValues.Custom,
ConnectionPoints = "@9,0;@10,10800;@11,21600;@12,10800",
ConnectAngles = "270,180,90,0"
};
TextPath textPath1 = new TextPath()
{
On = true,
FitShape = true
};
ShapeHandles shapeHandles1 = new ShapeHandles();
ShapeHandle shapeHandle1 = new ShapeHandle() { Position = "#0,bottomRight", XRange = "6629,14971" };
shapeHandles1.Append(shapeHandle1);
var lock1 = new Lock
{
Extension = ExtensionHandlingBehaviorValues.Edit,
TextLock = true,
ShapeType = true
};
shapetype1.Append(formulas1);
shapetype1.Append(path1);
shapetype1.Append(textPath1);
shapetype1.Append(shapeHandles1);
shapetype1.Append(lock1);
//// Create the diagonal watermark shape
Shape shape1 = new Shape()
{
Id = "PowerPlusWaterMarkObject357476642",
Style = "position:absolute;left:0;text-align:left;margin-left:0;margin-top:0;width:527.85pt;height:131.95pt;rotation:315;z-index:-251656192;mso-position-horizontal:center;mso-position-horizontal-relative:margin;mso-position-vertical:center;mso-position-vertical-relative:margin",
OptionalString = "_x0000_s2049",
AllowInCell = true,
FillColor = watermarkFillColor,
Stroked = false,
Type = "#_x0000_t136"
};
//// Switches on the transparency
Fill fill1 = new Fill() { Opacity = ".5" };
//// Font Style and display text
TextPath textPath2 = new TextPath()
{
Style = watermarkStyle,
String = watermarkText
};
TextWrap textWrap1 = new TextWrap()
{
AnchorX = HorizontalAnchorValues.Margin,
AnchorY = VerticalAnchorValues.Margin
};
shape1.Append(fill1);
shape1.Append(textPath2);
shape1.Append(textWrap1);
picture1.Append(shapetype1);
picture1.Append(shape1);
run1.Append(runProperties1);
run1.Append(picture1);
paragraph2.Append(paragraphProperties2);
paragraph2.Append(run1);
sdtContentBlock1.Append(paragraph2);
sdtBlock1.Append(sdtProperties1);
sdtBlock1.Append(sdtContentBlock1);
headerPart.Header.Append(sdtBlock1);
headerPart.Header.Save();
}
}
}
}