/// <summary> /// Inherit values from parent node. /// </summary> internal static void InheritValues(PdfDictionary page, InheritedValues values) { // HACK: I'M ABSOLUTELY NOT SURE WHETHER THIS CODE COVERS ALL CASES. if (values.Resources != null) { PdfDictionary resources; PdfItem res = page.Elements[PdfPage.Keys.Resources]; if (res is PdfReference) { resources = (PdfDictionary)((PdfReference)res).Value.Clone(); resources.Document = page.Owner; } else { resources = (PdfDictionary)res; } if (resources == null) { resources = values.Resources.Clone(); resources.Document = page.Owner; page.Elements.Add(PdfPage.Keys.Resources, resources); } else { foreach (PdfName name in values.Resources.Elements.KeyNames) { if (!resources.Elements.ContainsKey(name.Value)) { PdfItem item = values.Resources.Elements[name]; if (item is PdfObject) { item = item.Clone(); } resources.Elements.Add(name.ToString(), item); } } } } if (values.MediaBox != null && page.Elements[PdfPage.Keys.MediaBox] == null) { page.Elements[PdfPage.Keys.MediaBox] = values.MediaBox; } if (values.CropBox != null && page.Elements[PdfPage.Keys.CropBox] == null) { page.Elements[PdfPage.Keys.CropBox] = values.CropBox; } if (values.Rotate != null && page.Elements[PdfPage.Keys.Rotate] == null) { page.Elements[PdfPage.Keys.Rotate] = values.Rotate; } }
/// <summary> /// Add all inheritable values from the specified page to the specified values structure. /// </summary> internal static void InheritValues(PdfDictionary page, ref InheritedValues values) { PdfItem item = page.Elements[InheritablePageKeys.Resources]; if (item != null) { PdfReference reference = item as PdfReference; if (reference != null) { values.Resources = (PdfDictionary)(reference.Value); } else { values.Resources = (PdfDictionary)item; } } item = page.Elements[InheritablePageKeys.MediaBox]; if (item != null) { values.MediaBox = new PdfRectangle(item); } item = page.Elements[InheritablePageKeys.CropBox]; if (item != null) { values.CropBox = new PdfRectangle(item); } item = page.Elements[InheritablePageKeys.Rotate]; if (item != null) { if (item is PdfReference) { item = ((PdfReference)item).Value; } values.Rotate = (PdfInteger)item; } }
string ResolveUnspecified(object parentExitData) { StringBuilder sb = new StringBuilder(); if (HasInheritedValues) { sb.Append(InheritedValues.ToString()); } //make rest call if (HasUri) { sb.Append(WebRequestClient.GetString(Uri)); } //merge parms if (HasValues) { sb.Append(Values.ToString()); } if (HasDynamic) { foreach (string key in _dynamicData.Keys) { sb.Append($"{key}:{_dynamicData[key]},"); } } if (HasParentExitData) { sb.Append(parentExitData.ToString()); } return(sb.ToString().TrimEnd(',')); }
/// <summary> /// Add all inheritable values from the specified page to the specified values structure. /// </summary> internal static void InheritValues(PdfDictionary page, ref InheritedValues values) { PdfItem item = page.Elements[InheritablePageKeys.Resources]; if (item != null) { PdfReference reference = item as PdfReference; if (reference != null) values.Resources = (PdfDictionary)(reference.Value); else values.Resources = (PdfDictionary)item; } item = page.Elements[InheritablePageKeys.MediaBox]; if (item != null) values.MediaBox = new PdfRectangle(item); item = page.Elements[InheritablePageKeys.CropBox]; if (item != null) values.CropBox = new PdfRectangle(item); item = page.Elements[InheritablePageKeys.Rotate]; if (item != null) { if (item is PdfReference) item = ((PdfReference)item).Value; values.Rotate = (PdfInteger)item; } }
/// <summary> /// Inherit values from parent node. /// </summary> internal static void InheritValues(PdfDictionary page, InheritedValues values) { // HACK: I'M ABSOLUTELY NOT SURE WHETHER THIS CODE COVERS ALL CASES. if (values.Resources != null) { PdfDictionary resources; PdfItem res = page.Elements[InheritablePageKeys.Resources]; if (res is PdfReference) { resources = (PdfDictionary)((PdfReference)res).Value.Clone(); resources.Document = page.Owner; } else resources = (PdfDictionary)res; if (resources == null) { resources = values.Resources.Clone(); resources.Document = page.Owner; page.Elements.Add(InheritablePageKeys.Resources, resources); } else { foreach (PdfName name in values.Resources.Elements.KeyNames) { if (!resources.Elements.ContainsKey(name.Value)) { PdfItem item = values.Resources.Elements[name]; if (item is PdfObject) item = item.Clone(); resources.Elements.Add(name.ToString(), item); } } } } if (values.MediaBox != null && page.Elements[InheritablePageKeys.MediaBox] == null) page.Elements[InheritablePageKeys.MediaBox] = values.MediaBox; if (values.CropBox != null && page.Elements[InheritablePageKeys.CropBox] == null) page.Elements[InheritablePageKeys.CropBox] = values.CropBox; if (values.Rotate != null && page.Elements[InheritablePageKeys.Rotate] == null) page.Elements[InheritablePageKeys.Rotate] = values.Rotate; }
XmlDocument ResolveXml(ref List <object> forEachParms, object parentExitData, Dictionary <string, ParameterInfo> globalParamSets) { string context = "ResolveXml"; string errData = __nodata; try { XmlDocument parms = null; if (HasInheritedValues) { context = "InheritedValues=>Clone"; errData = InheritedValues.GetType().ToString(); parms = (XmlDocument)((XmlDocument)((ParameterInfo)InheritedValues).Values).Clone(); } if (HasUri) { context = "Uri=>Fetch"; try { errData = new Uri(Uri).ToString(); } catch { errData = Uri.ToString(); } string uriContent = WebRequestClient.GetString(Uri); context = "Uri=>Fetch, LoadXml"; errData = uriContent; XmlDocument uriXml = new XmlDocument(); uriXml.LoadXml(uriContent); context = parms != null ? "Merge->Inherited" : "Assign to parms"; context = $"Uri=>{context}"; errData = XmlHelpers.Serialize <XmlDocument>(uriXml); if (parms != null) { XmlHelpers.Merge(ref parms, uriXml); } else { parms = uriXml; } } //merge parms if (HasValues) { context = "HasValues=>LoadXml"; errData = Values.ToString(); XmlDocument values = new XmlDocument(); values.LoadXml(Values.ToString()); context = parms != null ? "Merge->Inherited+Uri+Values" : "Assign to parms"; context = $"Uri=>{context}"; errData = XmlHelpers.Serialize <XmlDocument>(values); if (parms != null) { XmlHelpers.Merge(ref parms, values); } else { parms = values; } } if (parms == null) { parms = new XmlDocument(); } //kv_replace if (HasDynamic) { context = "HasDynamic=>Merge->Inherited+Uri+Values+Dynamic"; try { errData = YamlHelpers.Serialize(_dynamicData); } catch { errData = __nodata; } //YamlHelpers not a mistake, used it on purpose for easy to read error data XmlHelpers.Merge(ref parms, Dynamic, _dynamicData); } if (HasParentExitData && parentExitData != null) { context = "ParentExitData=>Init Xml Source"; errData = parentExitData.GetType().ToString(); XmlDocument xd = new XmlDocument(); if (parentExitData is XmlNode) { xd.InnerXml = ((XmlNode)parentExitData).OuterXml; } else if (parentExitData is XmlNode[]) { xd.InnerXml = ((XmlNode[])parentExitData)[0].OuterXml; } else if (parentExitData is string) { xd.InnerXml = (string)parentExitData; } else { xd = (XmlDocument)parentExitData; } context = "ParentExitData=>Merge->Inhetited+Uri+Values+Dynamic+ParentExitData"; errData = XmlHelpers.Serialize <XmlDocument>(xd); XmlHelpers.Merge(ref parms, ParentExitData, ref xd); } if (HasForEach && parms != null) { //assemble ForEach variables if (ForEach.HasParameterSourceItems) { context = "ForEach=>HasParameterSourceItems"; errData = null; XmlHelpers.SelectForEachFromValues(ForEach.ParameterSourceItems, ref parms, globalParamSets, parentExitData); } //expand ForEach variables context = "ForEach=>ExpandForEach"; try { errData = XmlHelpers.Serialize <XmlDocument>(parms); } catch { errData = __nodata; } forEachParms = XmlHelpers.ExpandForEachAndApplyPatchValues(ref parms, ForEach); } return(parms); } catch (Exception ex) { throw new Exception(GetResolveExceptionMessage(context, errData), ex); } }