Guest User

Untitled

a guest
Jul 15th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. var instructionRegEx = new Regex(@"[w]*sMERGEFIELDs+(?<name>[w]+)", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
  2.  
  3. string GetFieldName(OpenXmlElement field)
  4. {
  5. string outerXml = field.OuterXml;
  6. if (!string.IsNullOrEmpty(outerXml))
  7. {
  8. Match m = instructionRegEx.Match(outerXml);
  9. if (m.Success)
  10. {
  11. return m.Groups["name"].ToString().Trim();
  12. }
  13. }
  14. return string.Empty;
  15. }
  16.  
  17. using (var docx = WordprocessingDocument.Open(filePath, true))
  18. {
  19. var fields = docx.MainDocumentPart.RootElement.Descendants<SimpleField>().Select(item => (OpenXmlElement)item)
  20. .Concat(docx.MainDocumentPart.RootElement.Descendants<FieldCode>().Select(item => (OpenXmlElement)item))
  21. .ToList();
  22. foreach (var field in fields)
  23. {
  24. var name = GetFieldName(field);
  25. if (string.IsNullOrEmpty(name)) continue;
  26. switch (name)
  27. {
  28. ///
  29. }
  30. }
  31. }
  32.  
  33. public static void ReplaceHtml(this WordprocessingDocument document, OpenXmlElement el, string html, bool disableHtmlHeader = false, string color = "", string alignment = "", string lineHeight = "", bool removeStyle = true)
  34. {
  35. var formatImportPart = document.MainDocumentPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Html);
  36. var idOfPart = document.MainDocumentPart.GetIdOfPart(formatImportPart);
  37. var convertedHtml = html.ConvertHtmlContent(disableHtmlHeader: disableHtmlHeader, aligment: alignment, color: color, lineHeight: lineHeight, removeStyle: removeStyle);
  38. using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(convertedHtml)))
  39. {
  40. formatImportPart.FeedData(ms);
  41. }
  42. var altChunk = new AltChunk
  43. {
  44. Id = idOfPart
  45. };
  46. var r = new Run();
  47. foreach (RunProperties placeholderrpr in el.Parent.Descendants<RunProperties>())
  48. {
  49. r.Append(new RunProperties(placeholderrpr.OuterXml));
  50. }
  51. r.Append(altChunk);
  52. ReplaceElement(el, r);
  53. }
  54. private static void ReplaceElement(OpenXmlElement el, OpenXmlElement newEl)
  55. {
  56. if (el == null) return;
  57. if (el is SimpleField)
  58. {
  59. el.Parent.ReplaceChild(newEl, el);
  60. }
  61. else if (el is FieldCode)
  62. {
  63. var parent = el.Parent;
  64. var begin = parent.PreviousSibling();
  65. var separate = parent.NextSibling();
  66. var runText = separate.NextSibling();
  67. var end = runText.NextSibling();
  68. var another = end.NextSibling();
  69. var container = parent.Parent;
  70. container.InsertAfter(newEl, parent);
  71. container.RemoveChild(parent);
  72. container.RemoveChild(begin);
  73. container.RemoveChild(separate);
  74. container.RemoveChild(runText);
  75. container.RemoveChild(end);
  76. }
  77. }
Add Comment
Please, Sign In to add comment