Wiki
Clone wikiAspose for OpenXML / Inserting Watermark Using OpenXML SDK
Inserting Watermark Using OpenXML SDK
#!c# using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using DocumentFormat.OpenXml; using V = DocumentFormat.OpenXml.Vml; using System.Diagnostics; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { using (WordprocessingDocument package = WordprocessingDocument.Open(@"C:\Users\*****\****.docx", true)) { InsertCustomWatermark(package, @"C:\Users\*******\****.jpg"); } } private void InsertCustomWatermark(WordprocessingDocument package, string p) { SetWaterMarkPicture(p); MainDocumentPart mainDocumentPart1 = package.MainDocumentPart; if (mainDocumentPart1 != null) { mainDocumentPart1.DeleteParts(mainDocumentPart1.HeaderParts); HeaderPart headPart1 = mainDocumentPart1.AddNewPart<HeaderPart>(); GenerateHeaderPart1Content(headPart1); string rId = mainDocumentPart1.GetIdOfPart(headPart1); ImagePart image = headPart1.AddNewPart<ImagePart>("image/jpeg", "rId999"); GenerateImagePart1Content(image); IEnumerable<SectionProperties> sectPrs = mainDocumentPart1.Document.Body.Elements<SectionProperties>(); foreach (var sectPr in sectPrs) { sectPr.RemoveAllChildren<HeaderReference>(); sectPr.PrependChild<HeaderReference>(new HeaderReference() { Id = rId }); } } else { MessageBox.Show("alert"); } } private void GenerateHeaderPart1Content(HeaderPart headerPart1) { Header header1 = new Header(); Paragraph paragraph2 = new Paragraph(); Run run1 = new Run(); Picture picture1 = new Picture(); V.Shape shape1 = new V.Shape() { Id = "WordPictureWatermark75517470", Style = "position:absolute;left:0;text-align:left;margin-left:0;margin-top:0;width:415.2pt;height:456.15pt;z-index:-251656192;mso-position-horizontal:center;mso-position-horizontal-relative:margin;mso-position-vertical:center;mso-position-vertical-relative:margin", OptionalString = "_x0000_s2051", AllowInCell = false, Type = "#_x0000_t75" }; V.ImageData imageData1 = new V.ImageData() { Gain = "19661f", BlackLevel = "22938f", Title = "水印", RelationshipId = "rId999" }; shape1.Append(imageData1); picture1.Append(shape1); run1.Append(picture1); paragraph2.Append(run1); header1.Append(paragraph2); headerPart1.Header = header1; } private void GenerateImagePart1Content(ImagePart imagePart1) { System.IO.Stream data = GetBinaryDataStream(imagePart1Data); imagePart1.FeedData(data); data.Close(); } private string imagePart1Data = ""; private System.IO.Stream GetBinaryDataStream(string base64String) { return new System.IO.MemoryStream(System.Convert.FromBase64String(base64String)); } public void SetWaterMarkPicture(string file) { FileStream inFile; byte[] byteArray; try { inFile = new FileStream(file, FileMode.Open, FileAccess.Read); byteArray = new byte[inFile.Length]; long byteRead = inFile.Read(byteArray, 0, (int)inFile.Length); inFile.Close(); imagePart1Data = Convert.ToBase64String(byteArray, 0, byteArray.Length); } catch (Exception ex) { Debug.Print(ex.Message); } } } }
Inserting Watermark Using Aspose SDK
#!c# using System; using System.IO; using System.Reflection; using Aspose.Words; using Aspose.Words.Drawing; using Aspose.Words.Fields; using System.Drawing; namespace Watermark { public class Program { public static void Main(string[] args) { // Sample infrastructure. string projectFiles = Path.GetFullPath("../../Files/"); Document doc = new Document(projectFiles + "TestDoc.doc"); InsertWatermarkText(doc, "CONFIDENTIAL"); doc.Save(projectFiles + "TestDoc Out.doc"); System.Console.WriteLine("Press any key to continue"); System.Console.ReadKey(); } /// <summary> /// Inserts a watermark into a document. /// </summary> /// <param name="doc">The input document.</param> /// <param name="watermarkText">Text of the watermark.</param> private static void InsertWatermarkText(Document doc, string watermarkText) { // Create a watermark shape. This will be a WordArt shape. // You are free to try other shape types as watermarks. Shape watermark = new Shape(doc, ShapeType.TextPlainText); // Set up the text of the watermark. watermark.TextPath.Text = watermarkText; watermark.TextPath.FontFamily = "Arial"; watermark.Width = 500; watermark.Height = 100; // Text will be directed from the bottom-left to the top-right corner. watermark.Rotation = -40; // Remove the following two lines if you need a solid black text. //watermark.Fill.Color = Color.Gray; // Try LightGray to get more Word-style watermark //watermark.StrokeColor = Color.Gray; // Try LightGray to get more Word-style watermark // Place the watermark in the page center. watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page; watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page; watermark.WrapType = WrapType.None; watermark.VerticalAlignment = VerticalAlignment.Center; watermark.HorizontalAlignment = HorizontalAlignment.Center; // Create a new paragraph and append the watermark to this paragraph. Paragraph watermarkPara = new Paragraph(doc); watermarkPara.AppendChild(watermark); // Insert the watermark into all headers of each document section. foreach (Section sect in doc.Sections) { // There could be up to three different headers in each section, since we want // the watermark to appear on all pages, insert into all headers. InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderPrimary); InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderFirst); InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderEven); } } private static void InsertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, HeaderFooterType headerType) { HeaderFooter header = sect.HeadersFooters[headerType]; if (header == null) { // There is no header of the specified type in the current section, create it. header = new HeaderFooter(sect.Document, headerType); sect.HeadersFooters.Add(header); } // Insert a clone of the watermark into the header. header.AppendChild(watermarkPara.Clone(true)); } } }
Updated