public static void SetContentOfContentControl(SdtElement contentControl, string content) { if (contentControl == null) { throw new ArgumentNullException("contentControl"); } content = string.IsNullOrEmpty(content) ? string.Empty : content; var isCombobox = contentControl.SdtProperties.Descendants<SdtContentDropDownList>().FirstOrDefault() != null; var isImage = contentControl.SdtProperties.Descendants<SdtContentPicture>().FirstOrDefault() != null; var prop = contentControl.Elements<SdtProperties>().FirstOrDefault(); if (isCombobox) { var openXmlCompositeElement = GetSdtContentOfContentControl(contentControl); var run = CreateRun(openXmlCompositeElement, content); SetSdtContentKeepingPermissionElements(openXmlCompositeElement, run); } if (isImage) { string embed = null; Drawing dr = contentControl.Descendants<Drawing>().FirstOrDefault(); if (dr != null) { DocumentFormat.OpenXml.Drawing.Blip blip = dr.Descendants<DocumentFormat.OpenXml.Drawing.Blip>().FirstOrDefault(); if (blip != null) { embed = blip.Embed; } } if (embed != null) { var document = (Document)prop.Ancestors<Body>().FirstOrDefault().Parent; IdPartPair idpp = document.MainDocumentPart.Parts.Where(pa => pa.RelationshipId == embed).FirstOrDefault(); if (idpp != null) { ImagePart ip = (ImagePart)idpp.OpenXmlPart; DirectoryInfo di = new DirectoryInfo(System.Reflection.Assembly.GetExecutingAssembly().Location); using (FileStream fileStream = File.Open(Path.Combine(di.Parent.FullName, content), FileMode.Open)) { ip.FeedData(fileStream); } } } } else { var openXmlCompositeElement = GetSdtContentOfContentControl(contentControl); contentControl.SdtProperties.RemoveAllChildren<ShowingPlaceholder>(); var runs = new List<Run>(); if (IsContentControlMultiline(contentControl)) { var textSplitted = content.Split(Environment.NewLine.ToCharArray()).ToList(); var addBreak = false; foreach (var textSplit in textSplitted) { var run = CreateRun(openXmlCompositeElement, textSplit); if (addBreak) { run.AppendChild(new Break()); } if (!addBreak) { addBreak = true; } runs.Add(run); } } else { runs.Add(CreateRun(openXmlCompositeElement, content)); } SdtContentCell aopenXmlCompositeElement = openXmlCompositeElement as SdtContentCell; if (aopenXmlCompositeElement != null) { AddRunsToSdtContentCell(aopenXmlCompositeElement, runs); } else if (openXmlCompositeElement is SdtContentBlock) { var para = CreateParagraph(openXmlCompositeElement, runs); SetSdtContentKeepingPermissionElements(openXmlCompositeElement, para); } else { SetSdtContentKeepingPermissionElements(openXmlCompositeElement, runs); } } }
void SetLogo(SdtElement element, byte[] image, WordprocessingDocument document) { try { // Assuming that the first image is the logo placeholder. This is a reasonable assumption. var blip = element.Descendants<Blip>().FirstOrDefault(); string imgId = "LogoPicture"; //assuming only one headerpart will have images var imagePart = document.MainDocumentPart.HeaderParts.First(p => p.ImageParts.Any()) .AddImagePart(ImagePartType.Png, imgId); using (var imageStream = new MemoryStream(image)) { imagePart.FeedData(imageStream); } if (blip != null) { blip.Embed = imgId; } } catch (Exception e) { //do nothing - just image will not be replaced } }
/// <summary> /// Gets the text from content control. /// </summary> /// <param name="contentControl">The content control.</param> /// <returns>Returns the text from the content controls</returns> public static string GetTextFromContentControl(SdtElement contentControl) { string result = null; if (contentControl != null) { if (contentControl is SdtRun) { if (IsContentControlMultiline(contentControl)) { var runs = contentControl.Descendants<SdtContentRun>().First().Elements() .Where(elem => elem is Run || elem is InsertedRun); var runTexts = new List<string>(); foreach (var run in runs) { foreach (var runChild in run.Elements()) { var runText = runChild as Text; var runBreak = runChild as Break; if (runText != null) { runTexts.Add(runText.Text); } else if (runBreak != null) { runTexts.Add(Environment.NewLine); } } } var stringBuilder = new StringBuilder(); foreach (var item in runTexts) { stringBuilder.Append(item); } result = stringBuilder.ToString(); } else { result = contentControl.InnerText; } } else { result = contentControl.InnerText; } } return result; }
void SetLogo(SdtElement element, byte[] image, WordprocessingDocument document) { try { var blip = element.Descendants<Blip>().FirstOrDefault(); var imgId = "LogoPicture"; var existingImage = document.MainDocumentPart.GetPartById(blip.Embed); var imagePart = document.MainDocumentPart.HeaderParts.First(p => p.ImageParts.Any()) .AddImagePart(ImagePartType.Png, imgId); using (var imageStream = new MemoryStream(image)) { imagePart.FeedData(imageStream); } if (blip != null) { blip.Embed = imgId; } } catch (Exception e) { //do nothing - just image will not be replaced } }