Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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();
     }
Exemple #4
0
        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));
        }
Exemple #5
0
        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);
            });
Exemple #6
0
        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);
        }
Exemple #7
0
 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);
     }
 }
Exemple #8
0
        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));
            }
        }
Exemple #10
0
        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);
                }
            }
        }
Exemple #11
0
        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));
            }
        }
Exemple #12
0
 internal protected abstract void RenderNode(WordTemplateParameters p);