Fast and easy to use cross-platform .NET library that creates or modifies Microsoft Word (DocX) and later also Excel (XLSX) files without installing any software. Library is based on Open XML SDK
MIT License
263
stars
47
forks
source link
*BREAKING CHANGE* Improve Watermark with colors, rotation and other settings #181
Ability to modify watermark (colors, text, rotation, width, height)
Ability to remove watermark
Ability to find watermarks in document, sections, headers
Ability to add watermark to document/section which makes watermark show up only on single page
Ability to add watermark to headers/footers which makes watermark show up on whole section
Breaking changes
This change breaks how watermarks are added. If you add them directly within section/document it will only apply to single page/pages as the SdtBlock gets added to body directly. If you need watermark for the whole section/document you need to add watermark to header/footer for it to apply to given section.
This example shows per section in header:
public static void Watermark_Sample1(string folderPath, bool openWord) {
Console.WriteLine("[*] Creating standard document with Watermark 2");
string filePath = System.IO.Path.Combine(folderPath, "Basic Document with Watermark 4.docx");
using (WordDocument document = WordDocument.Create(filePath)) {
document.AddParagraph("Section 0");
document.AddHeadersAndFooters();
document.Sections[0].Header.Default.AddParagraph("Section 0 - In header");
document.Sections[0].SetMargins(WordMargin.Normal);
Console.WriteLine(document.Sections[0].Margins.Left.Value);
Console.WriteLine(document.Sections[0].Margins.Right.Value);
Console.WriteLine(document.Sections[0].Margins.Type);
document.Sections[0].Margins.Type = WordMargin.Wide;
Console.WriteLine(document.Sections[0].Margins.Type);
Console.WriteLine("----");
var watermark = document.Sections[0].Header.Default.AddWatermark(WordWatermarkStyle.Text, "Watermark");
watermark.Color = Color.Red;
// ColorHex normally returns hex colors, but for watermark it returns string as the underlying value is in string name, not hex
Console.WriteLine(watermark.ColorHex);
Console.WriteLine(watermark.Rotation);
watermark.Rotation = 180;
Console.WriteLine(watermark.Rotation);
watermark.Stroked = true;
Console.WriteLine(watermark.Height);
Console.WriteLine(watermark.Width);
// width and height in points (HTML wise)
watermark.Height = 100.15;
watermark.Width = 500.18;
document.AddPageBreak();
document.AddPageBreak();
document.AddSection();
document.AddParagraph("Section 1");
document.Sections[1].AddHeadersAndFooters();
document.Sections[1].Header.Default.AddParagraph("Section 1 - In header");
document.Sections[1].Margins.Type = WordMargin.Narrow;
Console.WriteLine("----");
Console.WriteLine("Section 0 - Paragraphs Count: " + document.Sections[0].Header.Default.Paragraphs.Count);
Console.WriteLine("Section 1 - Paragraphs Count: " + document.Sections[1].Header.Default.Paragraphs.Count);
Console.WriteLine("----");
document.Sections[1].AddParagraph("Test");
document.Sections[1].Header.Default.AddWatermark(WordWatermarkStyle.Text, "Draft");
Console.WriteLine(document.Sections[0].Margins.Left.Value);
Console.WriteLine(document.Sections[0].Margins.Right.Value);
Console.WriteLine(document.Sections[1].Margins.Left.Value);
Console.WriteLine(document.Sections[1].Margins.Right.Value);
Console.WriteLine(document.Sections[1].Margins.Type);
document.Settings.SetBackgroundColor(Color.Azure);
Console.WriteLine("----");
Console.WriteLine("Watermarks in default header: " + document.Header.Default.Watermarks.Count);
Console.WriteLine("Watermarks in default footer: " + document.Footer.Default.Watermarks.Count);
Console.WriteLine("Watermarks in section 0: " + document.Sections[0].Watermarks.Count);
Console.WriteLine("Watermarks in section 0 (header): " + document.Sections[0].Header.Default.Watermarks.Count);
Console.WriteLine("Paragraphs in section 0 (header): " + document.Sections[0].Header.Default.Paragraphs.Count);
Console.WriteLine("Watermarks in section 1: " + document.Sections[1].Watermarks.Count);
Console.WriteLine("Watermarks in section 1 (header): " + document.Sections[1].Header.Default.Watermarks.Count);
Console.WriteLine("Paragraphs in section 1 (header): " + document.Sections[1].Header.Default.Paragraphs.Count);
Console.WriteLine("Watermarks in document: " + document.Watermarks.Count);
document.Save(false);
}
using (WordDocument document = WordDocument.Load(filePath)) {
//Console.WriteLine("----");
//Console.WriteLine("Watermarks in default header: " + document.Header.Default.Watermarks.Count);
//Console.WriteLine("Watermarks in default footer: " + document.Footer.Default.Watermarks.Count);
//Console.WriteLine("Watermarks in section 0: " + document.Sections[0].Watermarks.Count);
//Console.WriteLine("Watermarks in section 0 (header): " + document.Sections[0].Header.Default.Watermarks.Count);
//Console.WriteLine("Paragraphs in section 0 (header): " + document.Sections[0].Header.Default.Paragraphs.Count);
//Console.WriteLine("Watermarks in section 1: " + document.Sections[1].Watermarks.Count);
//Console.WriteLine("Paragraphs in section 1 (header): " + document.Sections[1].Header.Default.Paragraphs.Count);
//Console.WriteLine("Watermarks in document: " + document.Watermarks.Count);
document.Save(openWord);
}
}
Solves:
This change adds:
Breaking changes
This example shows per section in header:
This example shows per page: