Insert watermark in word document using OPEN XML SDK
//
if watermark image is available in site assets document library then attach to
document
SPFile waterMarkFile =
GetWatermarkImage(watermarkFleName);
if (waterMarkFile != null)
{
InsertCustomWatermark(myDoc, waterMarkFile);
}
#region
Watermark
private void InsertCustomWatermark(WordprocessingDocument package, SPFile p)
{
try
{
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 });
}
}
}
catch (Exception ex)
{
ULSLogService.DisplayError(this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name, ex);
}
}
private void GenerateHeaderPart1Content(HeaderPart headerPart1)
{
try
{
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;
}
catch (Exception ex)
{
ULSLogService.DisplayError(this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name, ex);
}
}
private void GenerateImagePart1Content(ImagePart imagePart1)
{
try
{
System.IO.Stream data =
GetBinaryDataStream(imagePart1Data);
imagePart1.FeedData(data);
data.Close();
}
catch (Exception ex)
{
ULSLogService.DisplayError(this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name, ex);
}
}
private string imagePart1Data = "";
private System.IO.Stream GetBinaryDataStream(string base64String)
{
return new System.IO.MemoryStream(System.Convert.FromBase64String(base64String));
}
public void SetWaterMarkPicture(SPFile file)
{
try
{
byte[] byteArray = file.OpenBinary();
imagePart1Data = System.Convert.ToBase64String(byteArray,
0, byteArray.Length);
}
catch (Exception ex)
{
ULSLogService.DisplayError(this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name, ex);
}
}
#endregion
#region Get
Item from Site Assets Library
private SPFile GetWatermarkImage(string ItemName)
{
SPFile file = null;
try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite spSite = new SPSite(SPContext.Current.Web.Url + "/sites/training"))
{
using (SPWeb spWeb = spSite.OpenWeb())
{
spWeb.AllowUnsafeUpdates = true;
SPList spList =
spWeb.Lists.TryGetList("Site Assets");
if (spList != null)
{
SPQuery qry = new SPQuery();
qry.Query =
string.Format(@"<Where>
<Eq>
<FieldRef Name='LinkFilename' />
<Value
Type='Computed'>{0}</Value>
</Eq>
</Where>", ItemName);
qry.ViewFields = @"<FieldRef
Name='FileRef' />";
qry.RowLimit
= 1;
SPListItemCollection
listItems = spList.GetItems(qry);
if (listItems.Count > 0)
{
SPListItem item = listItems[0];
file =
item.File;
}
}
}
}
});
}
catch (Exception ex)
{
ULSLogService.DisplayError(this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name, ex);
}
return file;
}
#endregion
No comments:
Post a Comment