internal void RenderNodes() { var parameters = new WordTemplateParameters(this.entity, this.culture, this.dicTokenColumn, this.table.Rows) { SystemWordTemplate = systemWordTemplate, Template = template, }; foreach (var part in document.AllParts().Where(p => p.RootElement != null)) { var root = part.RootElement; var baseNodes = root.Descendants <BaseNode>().ToList(); //eager foreach (var node in baseNodes) { node.RenderNode(parameters); } TableBinder.ProcessTables(part, parameters); foreach (var item in root.Descendants <D.Charts.ExternalData>().ToList()) { item.Remove(); } } foreach (var item in document.AllParts().OfType <EmbeddedPackagePart>().ToList()) { foreach (var p in item.GetParentParts().ToList()) { p.DeletePart(item); } } }
internal static void ProcessTables(OpenXmlPart part, WordTemplateParameters parameters) { var graphicFrames = part.RootElement.Descendants().Where(a => a.LocalName == "graphicFrame").ToList(); foreach (var item in graphicFrames) { var nonVisualProps = item.Descendants().SingleOrDefaultEx(a => a.LocalName == "cNvPr"); var title = GetTitle(nonVisualProps); Data.DataTable dataTable = title != null?GetDataTable(parameters, title) : null; if (dataTable != null) { var chartRef = item.Descendants <Charts.ChartReference>().SingleOrDefaultEx(); if (chartRef != null) { OpenXmlPart chartPart = part.GetPartById(chartRef.Id.Value); var chart = chartPart.RootElement.Descendants <Charts.Chart>().SingleEx(); ReplaceChart(chart, dataTable); } else { var table = item.Descendants <Drawing.Table>().SingleOrDefaultEx(); if (table != null) { ReplaceTable(table, dataTable); } } } } }
protected internal override void RenderNode(WordTemplateParameters p) { if (this.NodeProvider.IsParagraph(this.Parent) && !this.Parent !.ChildElements.Any(a => BlockContainerNode.IsImportant(a, NodeProvider) && a != this)) { this.Parent.Remove(); }
internal protected override void RenderNode(WordTemplateParameters p) { object obj = ValueProvider.GetValue(p); string text = obj is Enum ? ((Enum)obj).NiceToString() : obj is IFormattable ? ((IFormattable)obj).ToString(Format ?? ValueProvider.Format, p.Culture) : obj?.ToString(); this.ReplaceBy(this.NodeProvider.NewRun((OpenXmlCompositeElement)this.RunProperties?.CloneNode(true), text)); }
protected internal override void RenderNode(WordTemplateParameters p) { var parent = this.Parent; this.ValueProvider.Foreach(p, () => { var clone = (BlockNode)this.ForeachBlock !.CloneNode(true); var index = parent.ChildElements.IndexOf(this); parent.InsertAt(clone, index); clone.RenderNode(p); });
private static Data.DataTable?GetDataTable(WordTemplateParameters parameters, string title) { var key = title.TryBefore(":"); if (key == null) { return(null); } var provider = WordTemplateLogic.ToDataTableProviders.GetOrThrow(key); var table = provider.GetDataTable(title.After(":"), new WordTemplateLogic.WordContext(parameters.Template, (Entity?)parameters.Entity, parameters.Model)); return(table); }
protected internal override void RenderNode(WordTemplateParameters p) { if (this.ValueProvider.GetCondition(p, Operation, Value)) { this.ReplaceBy(this.IfBlock); this.IfBlock.RenderNode(p); } else if (ElseBlock != null) { this.ReplaceBy(this.ElseBlock); this.ElseBlock.RenderNode(p); } else { this.Parent.RemoveChild(this); } }
protected internal override void RenderNode(WordTemplateParameters p) { foreach (var item in this.Descendants <BaseNode>().ToList()) { item.RenderNode(p); } var parent = this.Parent; int index = parent.ChildElements.IndexOf(this); parent.RemoveChild(this); foreach (var item in this.ChildElements.ToList()) { item.Remove(); parent.InsertAt(item, index++); } }
internal protected override void RenderNode(WordTemplateParameters p) { object?obj = ValueProvider.GetValue(p); string?text = obj is Enum en?en.NiceToString() : obj is IFormattable fo?fo.ToString(Format ?? ValueProvider.Format, p.Culture) : obj?.ToString(); if (text != null && text.Contains('\n')) { var replacements = text.Lines().Select((line, i) => this.NodeProvider.NewRun((OpenXmlCompositeElement?)this.RunProperties?.CloneNode(true), line, initialBr: i > 0)); this.ReplaceBy(replacements); } else { this.ReplaceBy(this.NodeProvider.NewRun((OpenXmlCompositeElement?)this.RunProperties?.CloneNode(true), text)); } }
protected internal override void RenderNode(WordTemplateParameters p) { var filtered = this.ValueProvider.GetFilteredRows(p, Operation, Value); using (filtered is IEnumerable <ResultRow>?p.OverrideRows((IEnumerable <ResultRow>)filtered) : null) { if (filtered.Any()) { this.ReplaceBy(this.AnyBlock); this.AnyBlock.RenderNode(p); } else if (NotAnyBlock != null) { this.ReplaceBy(this.NotAnyBlock); this.NotAnyBlock.RenderNode(p); } else { this.Parent.RemoveChild(this); } } }
protected internal override void RenderNode(WordTemplateParameters p) { var obj = ValueProvider.GetValue(p); string text; switch (obj) { case Enum e: text = e.NiceToString(); break; case bool b: text = b ? BooleanEnum.True.NiceToString() : BooleanEnum.False.NiceToString(); break; case IFormattable f: text = f.ToString(Format ?? ValueProvider.Format, p.Culture); break; default: text = obj?.ToString(); break; } if (text != null && text.Contains('\n')) { var replacements = text.Lines() .Select((line, i) => NodeProvider.NewRun((OpenXmlCompositeElement)RunProperties?.CloneNode(true), line, initialBr: i > 0)); this.ReplaceBy(replacements); } else { this.ReplaceBy(NodeProvider.NewRun((OpenXmlCompositeElement)RunProperties?.CloneNode(true), text)); } }
internal protected abstract void RenderNode(WordTemplateParameters p);