PowerPointHelper.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. using DocumentFormat.OpenXml;
  2. using DocumentFormat.OpenXml.Drawing;
  3. using DocumentFormat.OpenXml.Packaging;
  4. using DocumentFormat.OpenXml.Presentation;
  5. using System.Collections.Generic;
  6. using System.Drawing;
  7. using System.Text;
  8. using System.Xml;
  9. using TEAMModelOS.SDK.Helper.Common.ColorHelper;
  10. using ColorMap = DocumentFormat.OpenXml.Presentation.ColorMap;
  11. using Theme = DocumentFormat.OpenXml.Drawing.Theme;
  12. namespace HiTeachCC.Service.PowerPoint.Implement
  13. {
  14. public class PowerPointHelper
  15. {
  16. public static XmlNamespaceManager GetXmlnsManager(XmlNameTable nameTable)
  17. {
  18. XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(nameTable);
  19. xmlnsManager.AddNamespace("p", "http://schemas.openxmlformats.org/presentationml/2006/main");
  20. xmlnsManager.AddNamespace("a", "http://schemas.openxmlformats.org/drawingml/2006/main");
  21. xmlnsManager.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
  22. xmlnsManager.AddNamespace("fo", "http://www.w3.org/1999/XSL/Format");
  23. xmlnsManager.AddNamespace("app", "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties");
  24. xmlnsManager.AddNamespace("cp", "http://schemas.openxmlformats.org/package/2006/metadata/core-properties");
  25. xmlnsManager.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");
  26. xmlnsManager.AddNamespace("dcterms", "http://purl.org/dc/terms/");
  27. xmlnsManager.AddNamespace("dcmitype", "http://purl.org/dc/dcmitype/");
  28. xmlnsManager.AddNamespace("rel", "http://schemas.openxmlformats.org/package/2006/relationships");
  29. xmlnsManager.AddNamespace("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
  30. xmlnsManager.AddNamespace("cus", "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties");
  31. xmlnsManager.AddNamespace("vt", "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes");
  32. xmlnsManager.AddNamespace("pic", "http://schemas.openxmlformats.org/drawingml/2006/picture");
  33. xmlnsManager.AddNamespace("dsp", "http://schemas.microsoft.com/office/drawing/2008/diagram");
  34. xmlnsManager.AddNamespace("dgm", "http://schemas.openxmlformats.org/drawingml/2006/diagram");
  35. xmlnsManager.AddNamespace("a14", "http://schemas.microsoft.com/office/drawing/2010/main");
  36. xmlnsManager.AddNamespace("m", "http://schemas.openxmlformats.org/officeDocument/2006/math");
  37. xmlnsManager.AddNamespace("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
  38. xmlnsManager.AddNamespace("p14", "http://schemas.microsoft.com/office/powerpoint/2010/main");
  39. xmlnsManager.AddNamespace("pkg", "http://schemas.microsoft.com/office/2006/xmlPackage");
  40. xmlnsManager.AddNamespace("p15", "http://schemas.microsoft.com/office/powerpoint/2012/main");
  41. xmlnsManager.AddNamespace("a16", "http://schemas.microsoft.com/office/drawing/2014/main");
  42. xmlnsManager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
  43. xmlnsManager.AddNamespace("c", "http://schemas.openxmlformats.org/drawingml/2006/chart");
  44. xmlnsManager.AddNamespace("c14", "http://schemas.microsoft.com/office/drawing/2007/8/2/chart");
  45. xmlnsManager.AddNamespace("c16", "http://schemas.microsoft.com/office/drawing/2014/chart");
  46. xmlnsManager.AddNamespace("cs", "http://schemas.microsoft.com/office/drawing/2012/chartStyle");
  47. xmlnsManager.AddNamespace("thm15", "http://schemas.microsoft.com/office/thememl/2012/main");
  48. xmlnsManager.AddNamespace("fn", "http://www.w3.org/2005/xpath-functions");
  49. return xmlnsManager;
  50. }
  51. /// <summary>
  52. /// 根据slideLayout 或 slideMaster 获取 id idx type
  53. /// </summary>
  54. /// <param name="xml"></param>
  55. /// <returns></returns>
  56. public static HiTeachCC.Model.PowerPoint.Style IndexNodes(string xml) {
  57. XmlDocument doc = new XmlDocument() ;
  58. doc.LoadXml(xml);
  59. XmlNodeList spTreeNodes = doc.SelectNodes("//p:cSld/p:spTree/child::*", GetXmlnsManager(doc.NameTable));
  60. XmlDocument idXmlDoc = new XmlDocument();
  61. //XmlDeclaration idxmldec = idXmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
  62. //idXmlDoc.AppendChild(idxmldec);
  63. //添加根节点
  64. XmlElement idElement = idXmlDoc.CreateElement("xmlDatas");
  65. idXmlDoc.AppendChild(idElement);
  66. XmlDocument idxXmlDoc = new XmlDocument();
  67. //XmlDeclaration idxxmldec = idxXmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
  68. //idxXmlDoc.AppendChild(idxxmldec);
  69. //添加根节点
  70. XmlElement idxElement = idxXmlDoc.CreateElement("xmlDatas");
  71. idxXmlDoc.AppendChild(idxElement);
  72. XmlDocument typeXmlDoc = new XmlDocument();
  73. //XmlDeclaration typexmldec = typeXmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
  74. //typeXmlDoc.AppendChild(typexmldec);
  75. //添加根节点
  76. XmlElement typeElement = typeXmlDoc.CreateElement("xmlDatas");
  77. typeXmlDoc.AppendChild(typeElement);
  78. //XmlDocument idNodeList = new XmlDocument();
  79. //XmlDocument idxNodeList = new XmlDocument();
  80. //XmlDocument typeNodeList = new XmlDocument();
  81. //Dictionary<string, object> idPairs = new Dictionary<string, object>();
  82. //Dictionary<string, object> idxPairs = new Dictionary<string, object>();
  83. //Dictionary<string, object> typePairs = new Dictionary<string, object>();
  84. if (spTreeNodes != null) {
  85. int size = spTreeNodes.Count;
  86. for (int i=0; i<size;i++) {
  87. XmlNode spnode = spTreeNodes.Item(i);
  88. if (spnode.Name.Equals("p:nvGrpSpPr") || spnode.Name.Equals("p:grpSpPr")) {
  89. continue;
  90. }
  91. if (spnode.LocalName.Equals("nvGrpSpPr") || spnode.LocalName.Equals("grpSpPr"))
  92. {
  93. continue;
  94. }
  95. XmlDocument docNode = new XmlDocument();
  96. docNode.LoadXml(spnode.OuterXml);
  97. XmlNode id = spnode.SelectSingleNode("./p:nvSpPr/p:cNvPr/@id", GetXmlnsManager(docNode.NameTable));
  98. XmlNode idx = spnode.SelectSingleNode("./p:nvSpPr/p:nvPr/p:ph/@idx", GetXmlnsManager(docNode.NameTable));
  99. XmlNode type = spnode.SelectSingleNode("./p:nvSpPr/p:nvPr/p:ph/@type", GetXmlnsManager(docNode.NameTable));
  100. var cnode = spnode.ChildNodes;
  101. StringBuilder builder = new StringBuilder();
  102. for (int m = 0; m < cnode.Count; m++)
  103. {
  104. var cn = cnode.Item(m);
  105. builder.Append(cn.OuterXml);
  106. }
  107. if (id != null)
  108. {
  109. XmlDocument docx = new XmlDocument();
  110. string str= "<xmlData id=\"" + id.Value + "\">"+ builder .ToString()+ "</xmlData>";
  111. docx.LoadXml(str);
  112. XmlNode importNode = idElement.OwnerDocument.ImportNode(docx.DocumentElement, true);
  113. idElement.AppendChild(importNode);
  114. }
  115. if (idx != null)
  116. {
  117. XmlDocument docx = new XmlDocument();
  118. string str = "<xmlData id=\"" + idx.Value + "\">" + builder.ToString() + "</xmlData>";
  119. docx.LoadXml(str);
  120. XmlNode importNode = idxElement.OwnerDocument.ImportNode(docx.DocumentElement, true);
  121. idxElement.AppendChild(importNode);
  122. }
  123. if (type != null)
  124. {
  125. XmlDocument docx = new XmlDocument();
  126. string str = "<xmlData id=\"" + type.Value + "\">" + builder.ToString() + "</xmlData>";
  127. docx.LoadXml(str);
  128. XmlNode importNode = typeElement.OwnerDocument.ImportNode(docx.DocumentElement, true);
  129. typeElement.AppendChild(importNode);
  130. }
  131. }
  132. }
  133. return new HiTeachCC.Model.PowerPoint.Style { IdTable = idXmlDoc, IdxTable = idxXmlDoc, TypeTable = typeXmlDoc };
  134. }
  135. public static string GetSlideBackgroundFill(SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> colors ,Theme theme)
  136. {
  137. XmlDocument doc = new XmlDocument();
  138. string SlideXml = slidePart.Slide.OuterXml;
  139. doc.LoadXml(SlideXml);
  140. /*
  141. * blipFill (图片填充)BlipFill
  142. effectDag (效果容器)EffectDag
  143. effectLst (效果容器)EffectList
  144. extLst (扩展名列表)ExtensionList
  145. gradFill (渐变填充)GradientFill
  146. grpFill (组填充)
  147. noFill (无填充)NoFill
  148. pattFill (图案填充)PatternFill
  149. compositeElementFill (纯色填充)SolidFill
  150. phClr 颜色占位
  151. 块引用 该方案颜色值设置为占位符颜色(该值phClr)。
  152. 此值显示在填充,线条,效果和背景样式中,并指示这些设置应用于适用于给定样式的主题颜色。
  153. 这允许相同的填充,线条和效果样式填充OfficeArt图库中显示的主题颜色。
  154. http://msdn.microsoft.com/en-us/library/cc964302(v=office.12).aspx
  155. */
  156. //使用xPath选择需要的节点
  157. XmlNode node_sld = doc.SelectSingleNode("//p:sld/p:cSld/p:bg/p:bgPr/a:solidFill", GetXmlnsManager(doc.NameTable));
  158. if (node_sld != null)
  159. {
  160. SolidFill compositeElement = new SolidFill(node_sld.OuterXml);
  161. string colorHex = GetBgFill(colors,
  162. compositeElement.RgbColorModelPercentage,
  163. compositeElement.RgbColorModelHex,
  164. compositeElement.HslColor,
  165. compositeElement.SystemColor,
  166. compositeElement.SchemeColor,
  167. compositeElement.PresetColor);
  168. return colorHex;
  169. }
  170. string SlideLayoutXml = slidePart.SlideLayoutPart.SlideLayout.OuterXml;
  171. OverrideColorMapping colorMap = slidePart.SlideLayoutPart.SlideLayout.ColorMapOverride.OverrideColorMapping;
  172. Dictionary<string, string> styleColors = new Dictionary<string, string>();
  173. if (colorMap != null)
  174. {
  175. styleColors = DoColorMap(colorMap, null, theme);
  176. }
  177. else {
  178. styleColors = colors;
  179. }
  180. doc.LoadXml(SlideLayoutXml);
  181. XmlNode node_sldLayout = doc.SelectSingleNode("//p:sldLayout/p:cSld/p:bg/p:bgPr/a:solidFill", GetXmlnsManager(doc.NameTable));
  182. if (node_sldLayout != null)
  183. {
  184. SolidFill compositeElement = new SolidFill(node_sldLayout.OuterXml);
  185. string colorHex = GetBgFill(styleColors,
  186. compositeElement.RgbColorModelPercentage,
  187. compositeElement.RgbColorModelHex,
  188. compositeElement.HslColor,
  189. compositeElement.SystemColor,
  190. compositeElement.SchemeColor,
  191. compositeElement.PresetColor);
  192. return colorHex;
  193. }
  194. node_sldLayout = doc.SelectSingleNode("//p:sldLayout/p:cSld/p:bg/p:bgRef", GetXmlnsManager(doc.NameTable));
  195. if (node_sldLayout != null)
  196. {
  197. BackgroundStyleReference compositeElement = new BackgroundStyleReference(node_sldLayout.OuterXml);
  198. string colorHex = GetBgFill(styleColors, compositeElement.RgbColorModelPercentage,
  199. compositeElement.RgbColorModelHex,
  200. compositeElement.HslColor,
  201. compositeElement.SystemColor,
  202. compositeElement.SchemeColor,
  203. compositeElement.PresetColor);
  204. return colorHex;
  205. }
  206. string slideMasterXml = slideMaster.OuterXml;
  207. doc.LoadXml(slideMasterXml);
  208. XmlNode node_sldMaster = doc.SelectSingleNode("//p:sldMaster/p:cSld/p:bg/p:bgPr/a:solidFill", GetXmlnsManager(doc.NameTable));
  209. if (node_sldMaster != null)
  210. {
  211. SolidFill compositeElement = new SolidFill(node_sldMaster.OuterXml);
  212. string colorHex = GetBgFill(colors, compositeElement.RgbColorModelPercentage,
  213. compositeElement.RgbColorModelHex,
  214. compositeElement.HslColor,
  215. compositeElement.SystemColor,
  216. compositeElement.SchemeColor,
  217. compositeElement.PresetColor);
  218. return colorHex;
  219. }
  220. node_sldMaster = doc.SelectSingleNode("//p:sldMaster/p:cSld/p:bg/p:bgRef", GetXmlnsManager(doc.NameTable));
  221. if (node_sldMaster != null)
  222. {
  223. BackgroundStyleReference compositeElement = new BackgroundStyleReference(node_sldMaster.OuterXml);
  224. string colorHex = GetBgFill(colors, compositeElement.RgbColorModelPercentage,
  225. compositeElement.RgbColorModelHex,
  226. compositeElement.HslColor,
  227. compositeElement.SystemColor,
  228. compositeElement.SchemeColor,
  229. compositeElement.PresetColor);
  230. return colorHex;
  231. }
  232. return "#FFF";
  233. }
  234. public static Dictionary<string, string> DoColorMap(OverrideColorMapping overrideColorMapping, ColorMap colorMap, Theme theme)
  235. {
  236. string[] colors = { "accent1", "accent2", "accent3", "accent4", "accent5", "accent6",
  237. "lt1", "lt2", "tx1", "tx2", "dk1","dk2","hlink","folHlink","bg1","bg2" };
  238. DocumentFormat.OpenXml.Drawing.ColorScheme colorScheme = theme.ThemeElements.ColorScheme;
  239. Dictionary<string, string> pairs = new Dictionary<string, string>();
  240. Dictionary<string, string> colorDict = new Dictionary<string, string>();
  241. if (overrideColorMapping != null)
  242. {
  243. colorDict.Add("Text1", overrideColorMapping.Text1);
  244. colorDict.Add("Text2", overrideColorMapping.Text2);
  245. colorDict.Add("Background1", overrideColorMapping.Background1);
  246. colorDict.Add("Background2", overrideColorMapping.Background2);
  247. }
  248. else
  249. {
  250. if (colorMap != null)
  251. {
  252. colorDict.Add("Text1", colorMap.Text1);
  253. colorDict.Add("Text2", colorMap.Text2);
  254. colorDict.Add("Background1", colorMap.Background1);
  255. colorDict.Add("Background2", colorMap.Background2);
  256. }
  257. }
  258. foreach (var col in colors)
  259. {
  260. pairs.Add(col, PowerPointHelper.ColorForThemeClr(col, colorScheme, colorDict));
  261. }
  262. return pairs;
  263. }
  264. private static string GetBgFill(Dictionary<string, string> colors,
  265. RgbColorModelPercentage RgbColorModelPercentage,
  266. RgbColorModelHex RgbColorModelHex,
  267. DocumentFormat.OpenXml.Drawing.HslColor HslColor,
  268. SystemColor SystemColor,
  269. SchemeColor SchemeColor,
  270. PresetColor PresetColor)
  271. {
  272. var colorHex = "#FFF";
  273. if (RgbColorModelPercentage != null)
  274. {
  275. int r = RgbColorModelPercentage.RedPortion.Value;
  276. int g = RgbColorModelPercentage.GreenPortion.Value;
  277. int b = RgbColorModelPercentage.BluePortion.Value;
  278. colorHex = "#" + ColorTranslator.ToHtml(Color.FromArgb(r, g, b));
  279. }
  280. if (RgbColorModelHex != null)
  281. {
  282. colorHex = "#" + RgbColorModelHex.Val;
  283. }
  284. if (HslColor != null)
  285. {
  286. ColorHSL colorHSL = new ColorHSL(HslColor.HueValue.Value, HslColor.SatValue.Value, HslColor.LumValue.Value);
  287. ColorRGB rbg = ColorHelper.HslToRgb(colorHSL);
  288. colorHex = "#" + ColorTranslator.ToHtml(Color.FromArgb(rbg.R, rbg.G, rbg.B));
  289. }
  290. if (SystemColor != null)
  291. {
  292. if (colors.TryGetValue(SystemColor.Val, out string clr))
  293. {
  294. colorHex = "#" + clr;
  295. }
  296. }
  297. if (SchemeColor != null)
  298. {
  299. if (colors.TryGetValue(SchemeColor.Val, out string clr))
  300. {
  301. colorHex = "#" + clr;
  302. }
  303. }
  304. if (PresetColor != null)
  305. {
  306. colorHex = PresetColor.Val.ToString().Replace("2010", "");
  307. System.Drawing.Color color = System.Drawing.Color.FromName(colorHex);
  308. colorHex = ColorTranslator.ToHtml(color);
  309. }
  310. return colorHex;
  311. }
  312. /// <summary>
  313. /// 在主题Theme中获取颜色
  314. /// </summary>
  315. /// <param name="scv"></param>
  316. /// <param name="theme"></param>
  317. /// <returns></returns>
  318. public static string ColorForThemeClr(string scv, DocumentFormat.OpenXml.Drawing.ColorScheme colorScheme,Dictionary<string,string> colorMap)
  319. {
  320. string colorStr = "";
  321. if (scv.Equals("tx1"))
  322. {
  323. if(colorMap.TryGetValue("Text1", out string Text1))
  324. colorStr = ColorForThemeClr(Text1, colorScheme, colorMap);
  325. return colorStr;
  326. }
  327. else if (scv.Equals("bg1"))
  328. {
  329. if (colorMap.TryGetValue("Background1", out string Background1))
  330. colorStr = ColorForThemeClr(Background1, colorScheme, colorMap);
  331. return colorStr;
  332. }
  333. else if (scv.Equals("bg2"))
  334. {
  335. if (colorMap.TryGetValue("Background2", out string Background2))
  336. colorStr = ColorForThemeClr(Background2, colorScheme, colorMap);
  337. return colorStr;
  338. }
  339. else if (scv.Equals("tx2"))
  340. {
  341. if (colorMap.TryGetValue("Text2", out string Text2))
  342. colorStr = ColorForThemeClr(Text2, colorScheme, colorMap);
  343. return colorStr;
  344. }
  345. else if (scv.Equals("dk1"))
  346. {
  347. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Dark1Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  348. if (sysColor != null)
  349. {
  350. return sysColor.LastColor;
  351. }
  352. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Dark1Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  353. if (rgbColor != null)
  354. {
  355. return rgbColor.Val;
  356. }
  357. return colorStr;
  358. }
  359. else if (scv.Equals("dk2"))
  360. {
  361. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Dark2Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  362. if (sysColor != null)
  363. {
  364. return sysColor.LastColor;
  365. }
  366. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Dark2Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  367. if (rgbColor != null)
  368. {
  369. return rgbColor.Val;
  370. }
  371. return colorStr;
  372. }
  373. else if (scv.Equals("accent1"))
  374. {
  375. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Accent1Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  376. if (sysColor != null)
  377. {
  378. return sysColor.LastColor;
  379. }
  380. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Accent1Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  381. if (rgbColor != null)
  382. {
  383. return rgbColor.Val;
  384. }
  385. return colorStr;
  386. }
  387. else if (scv.Equals("accent2"))
  388. {
  389. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Accent2Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  390. if (sysColor != null)
  391. {
  392. return sysColor.LastColor;
  393. }
  394. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Accent2Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  395. if (rgbColor != null)
  396. {
  397. return rgbColor.Val;
  398. }
  399. return colorStr;
  400. }
  401. else if (scv.Equals("accent3"))
  402. {
  403. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Accent3Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  404. if (sysColor != null)
  405. {
  406. return sysColor.LastColor;
  407. }
  408. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Accent3Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  409. if (rgbColor != null)
  410. {
  411. return rgbColor.Val;
  412. }
  413. return colorStr;
  414. }
  415. else if (scv.Equals("accent4"))
  416. {
  417. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Accent4Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  418. if (sysColor != null)
  419. {
  420. return sysColor.LastColor;
  421. }
  422. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Accent4Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  423. if (rgbColor != null)
  424. {
  425. return rgbColor.Val;
  426. }
  427. return colorStr;
  428. }
  429. else if (scv.Equals("accent5"))
  430. {
  431. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Accent5Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  432. if (sysColor != null)
  433. {
  434. return sysColor.LastColor;
  435. }
  436. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Accent5Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  437. if (rgbColor != null)
  438. {
  439. return rgbColor.Val;
  440. }
  441. return colorStr;
  442. }
  443. else if (scv.Equals("accent6"))
  444. {
  445. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Accent6Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  446. if (sysColor != null)
  447. {
  448. return sysColor.LastColor;
  449. }
  450. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Accent6Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  451. if (rgbColor != null)
  452. {
  453. return rgbColor.Val;
  454. }
  455. return colorStr;
  456. }
  457. else if (scv.Equals("lt1"))
  458. {
  459. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Light1Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  460. if (sysColor != null)
  461. {
  462. return sysColor.LastColor;
  463. }
  464. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Light1Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  465. if (rgbColor != null)
  466. {
  467. return rgbColor.Val;
  468. }
  469. return colorStr;
  470. }
  471. else if (scv.Equals("lt2"))
  472. {
  473. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Light2Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  474. if (sysColor != null)
  475. {
  476. return sysColor.LastColor;
  477. }
  478. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Light2Color.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  479. if (rgbColor != null)
  480. {
  481. return rgbColor.Val;
  482. }
  483. return colorStr;
  484. }
  485. else if (scv.Equals("hlink"))
  486. {
  487. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.Hyperlink.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  488. if (sysColor != null)
  489. {
  490. return sysColor.LastColor;
  491. }
  492. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.Hyperlink.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  493. if (rgbColor != null)
  494. {
  495. return rgbColor.Val;
  496. }
  497. return colorStr;
  498. }
  499. else if (scv.Equals("folHlink"))
  500. {
  501. DocumentFormat.OpenXml.Drawing.SystemColor sysColor = colorScheme.FollowedHyperlinkColor.ChildElements.First<DocumentFormat.OpenXml.Drawing.SystemColor>();
  502. if (sysColor != null)
  503. {
  504. return sysColor.LastColor;
  505. }
  506. DocumentFormat.OpenXml.Drawing.RgbColorModelHex rgbColor = colorScheme.FollowedHyperlinkColor.ChildElements.First<DocumentFormat.OpenXml.Drawing.RgbColorModelHex>();
  507. if (rgbColor != null)
  508. {
  509. return rgbColor.Val;
  510. }
  511. return colorStr;
  512. }
  513. return colorStr;
  514. }
  515. }
  516. }