Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var instructionRegEx = new Regex(@"[w]*sMERGEFIELDs+(?<name>[w]+)", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
- string GetFieldName(OpenXmlElement field)
- {
- string outerXml = field.OuterXml;
- if (!string.IsNullOrEmpty(outerXml))
- {
- Match m = instructionRegEx.Match(outerXml);
- if (m.Success)
- {
- return m.Groups["name"].ToString().Trim();
- }
- }
- return string.Empty;
- }
- using (var docx = WordprocessingDocument.Open(filePath, true))
- {
- var fields = docx.MainDocumentPart.RootElement.Descendants<SimpleField>().Select(item => (OpenXmlElement)item)
- .Concat(docx.MainDocumentPart.RootElement.Descendants<FieldCode>().Select(item => (OpenXmlElement)item))
- .ToList();
- foreach (var field in fields)
- {
- var name = GetFieldName(field);
- if (string.IsNullOrEmpty(name)) continue;
- switch (name)
- {
- ///
- }
- }
- }
- public static void ReplaceHtml(this WordprocessingDocument document, OpenXmlElement el, string html, bool disableHtmlHeader = false, string color = "", string alignment = "", string lineHeight = "", bool removeStyle = true)
- {
- var formatImportPart = document.MainDocumentPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Html);
- var idOfPart = document.MainDocumentPart.GetIdOfPart(formatImportPart);
- var convertedHtml = html.ConvertHtmlContent(disableHtmlHeader: disableHtmlHeader, aligment: alignment, color: color, lineHeight: lineHeight, removeStyle: removeStyle);
- using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(convertedHtml)))
- {
- formatImportPart.FeedData(ms);
- }
- var altChunk = new AltChunk
- {
- Id = idOfPart
- };
- var r = new Run();
- foreach (RunProperties placeholderrpr in el.Parent.Descendants<RunProperties>())
- {
- r.Append(new RunProperties(placeholderrpr.OuterXml));
- }
- r.Append(altChunk);
- ReplaceElement(el, r);
- }
- private static void ReplaceElement(OpenXmlElement el, OpenXmlElement newEl)
- {
- if (el == null) return;
- if (el is SimpleField)
- {
- el.Parent.ReplaceChild(newEl, el);
- }
- else if (el is FieldCode)
- {
- var parent = el.Parent;
- var begin = parent.PreviousSibling();
- var separate = parent.NextSibling();
- var runText = separate.NextSibling();
- var end = runText.NextSibling();
- var another = end.NextSibling();
- var container = parent.Parent;
- container.InsertAfter(newEl, parent);
- container.RemoveChild(parent);
- container.RemoveChild(begin);
- container.RemoveChild(separate);
- container.RemoveChild(runText);
- container.RemoveChild(end);
- }
- }
Add Comment
Please, Sign In to add comment