I use the following code to apply a watermark to a word document:
Public Sub ApplyWatermark(ByVal watermarkType As String, ByVal SourceDoc As String)
Dim doc As Document = New Document(SourceDoc)
Dim watermark As New Shape(doc, ShapeType.TextPlainText)
watermark.TextPath.Text = watermarkType
watermark.TextPath.FontFamily = "Arial"
watermark.Width = 500
watermark.Height = 100
watermark.Rotation = -40
watermark.Fill.Color = System.Drawing.Color.LightGray
watermark.StrokeColor = System.Drawing.Color.LightGray
watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page
watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page
watermark.WrapType = WrapType.None
watermark.VerticalAlignment = VerticalAlignment.Center
watermark.HorizontalAlignment = HorizontalAlignment.Center
Dim watermarkPara As New Paragraph(doc)
watermarkPara.AppendChild(watermark)
For Each sect As Section In doc.Sections
InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderPrimary)
InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderFirst)
InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderEven)
Next sect
doc.Save(SourceDoc)
End Sub
Private Shared Sub InsertWatermarkIntoHeader(ByVal watermarkPara As Paragraph, ByVal sect As Section, ByVal headerType As HeaderFooterType)
Dim header As HeaderFooter = sect.HeadersFooters(headerType)
If header Is Nothing Then
header = New HeaderFooter(sect.Document, headerType)
sect.HeadersFooters.Add(header)
End If
header.AppendChild(watermarkPara.Clone(True))
End Sub
The watermark is successfully applied to the document. The problem I have is that during this process I end up with an extra blank line in my headers. This causes the document to not be the same length after the watermark is added. On some documents the page count ends up more than before because of the empty lines.
I can go into the header and remove the extra line without disturbing the watermark but I have thousands of documents that I’ll be processing.
Is there any way to keep it from putting that extra line into the header?
Hi Jason,
Thanks for you inquiry.
This is happening because you have a paragraph in the header already and the code above from the article inserts the watermark in it’s own new paragraph. To get around this you can check if the header already contains a paragraph and append the watermark to that intead of creating a new one.
Please see the code below:
Public Shared Sub ApplyWatermark(ByVal watermarkType As String, ByVal SourceDoc As String)
Dim doc As Document = New Document(SourceDoc)
Dim watermark As New Shape(doc, ShapeType.TextPlainText)
watermark.TextPath.Text = watermarkType
watermark.TextPath.FontFamily = "Arial"
watermark.Width = 500
watermark.Height = 100
watermark.Rotation = -40
watermark.Fill.Color = System.Drawing.Color.LightGray
watermark.StrokeColor = System.Drawing.Color.LightGray
watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page
watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page
watermark.WrapType = WrapType.None
watermark.VerticalAlignment = VerticalAlignment.Center
watermark.HorizontalAlignment = HorizontalAlignment.Center
For Each sect As Section In doc.Sections
InsertWatermarkIntoHeader(watermark, sect, HeaderFooterType.HeaderPrimary)
InsertWatermarkIntoHeader(watermark, sect, HeaderFooterType.HeaderFirst)
InsertWatermarkIntoHeader(watermark, sect, HeaderFooterType.HeaderEven)
Next sect
doc.Save(SourceDoc)
End Sub
Private Shared Sub InsertWatermarkIntoHeader(ByVal watermark As Shape, ByVal sect As Section, ByVal headerType As HeaderFooterType)
Dim header As HeaderFooter = sect.HeadersFooters(headerType)
If header Is Nothing Then
header = New HeaderFooter(sect.Document, headerType)
sect.HeadersFooters.Add(header)
End If
' There are no paragraphs in this header, create one
If (header.GetChildNodes(NodeType.Paragraph, False).Count = 0) Then
Dim watermarkPara As Paragraph = New Paragraph(sect.Document)
header.AppendChild(watermarkPara)
End If
' Append a copy of the watermark to the last paragraph in this header
header.LastParagraph.AppendChild(watermark.Clone(True))
End Sub
We always appreciate positive feedback from our customers. Please feel free to ask if you have any question about Aspose.Words, we will be happy to help you.