/// <summary>
        /// Render a foreach page element
        /// </summary>
        /// <param name="forEach"></param>
        /// <param name="document"></param>
        /// <param name="wdDoc"></param>
        /// <param name="context"></param>
        /// <param name="mainDocumentPart"></param>
        /// <param name="formatProvider"></param>
        public static void Render(this ForEachPage forEach,
                                  Document document,
                                  OpenXmlElement wdDoc,
                                  ContextModel context,
                                  MainDocumentPart mainDocumentPart,
                                  IFormatProvider formatProvider)
        {
            context.ReplaceItem(forEach, formatProvider);

            if (string.IsNullOrEmpty(forEach.DataSourceKey) ||
                !context.ExistItem <DataSourceModel>(forEach.DataSourceKey))
            {
                return;
            }

            var datasource = context.GetItem <DataSourceModel>(forEach.DataSourceKey);

            if (datasource == null || datasource.Items == null)
            {
                return;
            }

            int i = 0;

            foreach (var item in datasource.Items)
            {
                var newPage = forEach.Clone();
                // doc inherit margin from page
                if (document.Margin == null && newPage.Margin != null)
                {
                    document.Margin = newPage.Margin;
                }
                // newPage inherit margin from doc
                else if (document.Margin != null && newPage.Margin == null)
                {
                    newPage.Margin = document.Margin;
                }

                if (!string.IsNullOrWhiteSpace(forEach.AutoContextAddItemsPrefix))
                {
                    // We add automatic keys :
                    // Is first item
                    item.AddItem("#" + forEach.AutoContextAddItemsPrefix + "_ForEachPage_IsFirstItem#", new BooleanModel(i == 0));
                    item.AddItem("#" + forEach.AutoContextAddItemsPrefix + "_ForEachPage_IsNotFirstItem#", new BooleanModel(i > 0));
                    // Is last item
                    item.AddItem("#" + forEach.AutoContextAddItemsPrefix + "_ForEachPage_IsLastItem#", new BooleanModel(i == datasource.Items.Count - 1));
                    // Index of the element (Based on 0, and based on 1)
                    item.AddItem("#" + forEach.AutoContextAddItemsPrefix + "_ForEachPage_IndexBaseZero#", new StringModel(i.ToString()));
                    item.AddItem("#" + forEach.AutoContextAddItemsPrefix + "_ForEachPage_IndexBaseOne#", new StringModel((i + 1).ToString()));
                    item.AddItem("#" + forEach.AutoContextAddItemsPrefix + "_ForEachPage_IsOdd#", new BooleanModel(i % 2 == 1));
                    item.AddItem("#" + forEach.AutoContextAddItemsPrefix + "_ForEachPage_IsEven#", new BooleanModel(i % 2 == 0));
                }

                newPage.Clone().Render(document, wdDoc, item, mainDocumentPart, formatProvider);

                i++;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Render a ForEach element in the document
        /// </summary>
        /// <param name="forEach"></param>
        /// <param name="document"></param>
        /// <param name="parent"></param>
        /// <param name="context"></param>
        /// <param name="documentPart"></param>
        /// <param name="formatProvider"></param>
        public static void Render(this ForEach forEach,
                                  Document document,
                                  OpenXmlElement parent,
                                  ContextModel context,
                                  OpenXmlPart documentPart,
                                  IFormatProvider formatProvider)
        {
            context.ReplaceItem(forEach, formatProvider);

            if (string.IsNullOrEmpty(forEach.DataSourceKey) ||
                !context.ExistItem <DataSourceModel>(forEach.DataSourceKey))
            {
                return;
            }

            var datasource = context.GetItem <DataSourceModel>(forEach.DataSourceKey);

            if (datasource == null || datasource.Items == null)
            {
                return;
            }

            int i = 0;

            foreach (var item in datasource.Items)
            {
                item.AddAutoContextAddItemsPrefix(forEach, i, datasource);

                for (int j = 0; j < forEach.ItemTemplate.Count; j++)
                {
                    var template = forEach.ItemTemplate[j];
                    var clone    = template.Clone();

                    // Specific rule for TemplateModels in childs :
                    if (clone is TemplateModel)
                    {
                        var templateElements = (clone as TemplateModel).ExtractTemplateItems(document);
                        foreach (var templateEement in templateElements)
                        {
                            templateEement.Render(document, parent, item, documentPart, formatProvider);
                        }
                    }
                    else
                    {
                        clone.Render(document, parent, item, documentPart, formatProvider);
                    }
                }

                i++;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Render a table element
        /// </summary>
        /// <param name="table"></param>
        /// <param name="parent"></param>
        /// <param name="context"></param>
        /// <param name="documentPart"></param>
        /// <param name="formatProvider"></param>
        /// <returns></returns>
        public static Run Render(this BarModel barChart, OpenXmlElement parent, ContextModel context, OpenXmlPart documentPart, IFormatProvider formatProvider)
        {
            context.ReplaceItem(barChart, formatProvider);

            Run runItem = null;

            if (!string.IsNullOrWhiteSpace(barChart.DataSourceKey) && context.ExistItem <BarChartModel>(barChart.DataSourceKey))
            {
                // We construct categories and series from the context object
                var contextModel = context.GetItem <BarChartModel>(barChart.DataSourceKey);

                if (contextModel.BarChartContent != null && contextModel.BarChartContent.Categories != null &&
                    contextModel.BarChartContent.Series != null)
                {
                    // Update barChart object :
                    barChart.Categories = contextModel.BarChartContent.Categories.Select(e => new BarCategory()
                    {
                        Name  = e.Name,
                        Color = e.Color
                    }).ToList();

                    // We update
                    barChart.Series = contextModel.BarChartContent.Series.Select(e => new BarSerie()
                    {
                        LabelFormatString = e.LabelFormatString,
                        Color             = e.Color,
                        DataLabelColor    = e.DataLabelColor,
                        Values            = e.Values,
                        Name = e.Name
                    }).ToList();
                }
                else
                {
                    return(runItem);
                }
            }

            switch (barChart.BarChartType)
            {
            case BarChartType.BarChart:
                runItem = CreateBarGraph(barChart, documentPart);
                break;
            }

            if (runItem != null)
            {
                parent.AppendChild(runItem);
            }

            return(runItem);
        }
Exemplo n.º 4
0
        public static void Render(this Page page, Models.Document document, OpenXmlElement wdDoc, ContextModel context, MainDocumentPart mainDocumentPart, IFormatProvider formatProvider)
        {
            if (!string.IsNullOrWhiteSpace(page.ShowKey) && context.ExistItem <BooleanModel>(page.ShowKey) && !context.GetItem <BooleanModel>(page.ShowKey).Value)
            {
                return;
            }

            // add page content
            ((BaseElement)page).Render(document, wdDoc, context, mainDocumentPart, formatProvider);

            // add section to manage orientation. Last section is at the end of document
            var pageSize = new PageSize()
            {
                Orient = page.PageOrientation.ToOOxml(),
                Width  = UInt32Value.FromUInt32(page.PageOrientation == PageOrientationValues.Landscape ? (uint)16839 : 11907),
                Height = UInt32Value.FromUInt32(page.PageOrientation == PageOrientationValues.Landscape ? (uint)11907 : 16839)
            };
            var sectionProps = new SectionProperties(pageSize);

            // document margins
            if (page.Margin != null)
            {
                var pageMargins = new PageMargin()
                {
                    Left   = page.Margin.Left,
                    Top    = page.Margin.Top,
                    Right  = page.Margin.Right,
                    Bottom = page.Margin.Bottom,
                    Footer = page.Margin.Footer,
                    Header = page.Margin.Header
                };
                sectionProps.AppendChild(pageMargins);
            }
            var p   = new DocumentFormat.OpenXml.Wordprocessing.Paragraph();
            var ppr = new ParagraphProperties();

            p.AppendChild(ppr);
            ppr.AppendChild(sectionProps);
            wdDoc.AppendChild(p);
        }
        /// <summary>
        /// Render a table element
        /// </summary>
        /// <param name="uniformGrid"></param>
        /// <param name="parent"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public static DocumentFormat.OpenXml.Wordprocessing.Table Render(this UniformGrid uniformGrid, Document document, OpenXmlElement parent, ContextModel context, OpenXmlPart documentPart, IFormatProvider formatProvider)
        {
            context.ReplaceItem(uniformGrid, formatProvider);

            if (!string.IsNullOrEmpty(uniformGrid.DataSourceKey) && context.ExistItem <DataSourceModel>(uniformGrid.DataSourceKey))
            {
                var datasource = context.GetItem <DataSourceModel>(uniformGrid.DataSourceKey);

                if (datasource != null && datasource.Items.Count > 0)
                {
                    var createdTable = TableExtensions.CreateTable(document, uniformGrid, context, documentPart, formatProvider);
                    var wordTable    = createdTable.Item1;
                    var tableLook    = createdTable.Item2;

                    // Before rows :
                    TableExtensions.ManageBeforeAfterRows(document, uniformGrid, uniformGrid.BeforeRows, wordTable, context, documentPart, formatProvider);

                    // Table of cells :
                    List <List <ContextModel> > rowsContentContexts = new List <List <ContextModel> >();

                    int i            = 0;
                    var lastCellsRow = new List <ContextModel>();

                    // add content rows
                    foreach (var item in datasource.Items)
                    {
                        if (i > 0 && i % uniformGrid.ColsWidth.Length == 0)
                        {
                            // end of line :
                            rowsContentContexts.Add(lastCellsRow);
                            lastCellsRow = new List <ContextModel>();
                        }
                        lastCellsRow.Add(item);

                        i++;
                    }

                    if (i % uniformGrid.ColsWidth.Length == 0)
                    {
                        rowsContentContexts.Add(lastCellsRow);
                    }

                    if (datasource.Items.Count % uniformGrid.ColsWidth.Length > 0)
                    {
                        var acountAddNullItems = uniformGrid.ColsWidth.Length - (datasource.Items.Count % uniformGrid.ColsWidth.Length);
                        if (acountAddNullItems > 0)
                        {
                            for (int j = 0; j < acountAddNullItems; j++)
                            {
                                lastCellsRow.Add(new ContextModel());
                            }
                            rowsContentContexts.Add(lastCellsRow);
                        }
                    }

                    // Now we create all row :
                    i = 0;
                    foreach (var rowContentContext in rowsContentContexts)
                    {
                        var row = new Row
                        {
                            CantSplit = uniformGrid.CantSplitRows,
                        };
                        row.InheritFromParent(uniformGrid);

                        wordTable.AppendChild(row.Render(document, wordTable, context, rowContentContext, uniformGrid.CellModel, documentPart, false, (i % 2 == 1), formatProvider));

                        i++;
                    }

                    // After rows :
                    TableExtensions.ManageBeforeAfterRows(document, uniformGrid, uniformGrid.AfterRows, wordTable, context, documentPart, formatProvider);

                    TableExtensions.ManageFooterRow(document, uniformGrid, wordTable, tableLook, context, documentPart, formatProvider);

                    parent.AppendChild(wordTable);
                    return(wordTable);
                }
            }

            return(null);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Render a table element
        /// </summary>
        /// <param name="table"></param>
        /// <param name="parent"></param>
        /// <param name="context"></param>
        /// <param name="formatProvider"></param>
        /// <returns></returns>
        public static Table Render(this Models.Table table, Models.Document document, OpenXmlElement parent, ContextModel context, OpenXmlPart documentPart, IFormatProvider formatProvider)
        {
            context.ReplaceItem(table, formatProvider);

            var createdTable = CreateTable(document, table, context, documentPart, formatProvider);
            var wordTable    = createdTable.Item1;
            var tableLook    = createdTable.Item2;

            // Before rows :
            ManageBeforeAfterRows(document, table, table.BeforeRows, wordTable, context, documentPart, formatProvider);

            // add content rows
            if (!string.IsNullOrEmpty(table.DataSourceKey))
            {
                if (context.ExistItem <DataSourceModel>(table.DataSourceKey))
                {
                    var datasource = context.GetItem <DataSourceModel>(table.DataSourceKey);

                    int i = 0;

                    foreach (var item in datasource.Items)
                    {
                        var row = table.RowModel.Clone();
                        row.InheritFromParent(table);

                        if (!string.IsNullOrWhiteSpace(table.AutoContextAddItemsPrefix))
                        {
                            // We add automatic keys :
                            // Is first item
                            item.AddItem("#" + table.AutoContextAddItemsPrefix + "_TableRow_IsFirstItem#", new BooleanModel(i == 0));
                            item.AddItem("#" + table.AutoContextAddItemsPrefix + "_TableRow_IsNotFirstItem#", new BooleanModel(i > 0));
                            // Is last item
                            item.AddItem("#" + table.AutoContextAddItemsPrefix + "_TableRow_IsLastItem#", new BooleanModel(i == datasource.Items.Count - 1));
                            // Index of the element (Based on 0, and based on 1)
                            item.AddItem("#" + table.AutoContextAddItemsPrefix + "_TableRow_IndexBaseZero#", new StringModel(i.ToString()));
                            item.AddItem("#" + table.AutoContextAddItemsPrefix + "_TableRow_IndexBaseOne#", new StringModel((i + 1).ToString()));
                            item.AddItem("#" + table.AutoContextAddItemsPrefix + "_TableRow_IsOdd#", new BooleanModel(i % 2 == 1));
                            item.AddItem("#" + table.AutoContextAddItemsPrefix + "_TableRow_IsEven#", new BooleanModel(i % 2 == 0));
                        }

                        wordTable.AppendChild(row.Render(document, wordTable, item, documentPart, false, (i % 2 == 1), formatProvider));

                        i++;
                    }
                }
            }
            else
            {
                int i = 0;
                foreach (var row in table.Rows)
                {
                    row.InheritFromParent(table);
                    wordTable.AppendChild(row.Render(document, wordTable, context, documentPart, false, (i % 2 == 1), formatProvider));
                    i++;
                }
            }

            // After rows :
            ManageBeforeAfterRows(document, table, table.AfterRows, wordTable, context, documentPart, formatProvider);

            // Footer
            ManageFooterRow(document, table, wordTable, tableLook, context, documentPart, formatProvider);

            parent.AppendChild(wordTable);
            return(wordTable);
        }
Exemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="row"></param>
        /// <param name="document"></param>
        /// <param name="parent"></param>
        /// <param name="context"></param>
        /// <param name="documentPart"></param>
        /// <param name="isHeader"></param>
        /// <param name="isAlternateRow">true for even lines</param>
        /// <param name="formatProvider"></param>
        /// <returns></returns>
        public static TableRow Render(this Row row, Models.Document document, OpenXmlElement parent, ContextModel context, OpenXmlPart documentPart, bool isHeader, bool isAlternateRow, IFormatProvider formatProvider)
        {
            if (!string.IsNullOrWhiteSpace(row.ShowKey) && context.ExistItem <BooleanModel>(row.ShowKey) && !context.GetItem <BooleanModel>(row.ShowKey).Value)
            {
                return(null);
            }

            context.ReplaceItem(row, formatProvider);

            TableRow wordRow = new TableRow();

            TableRowProperties wordRowProperties = new TableRowProperties();

            if (isHeader)
            {
                wordRowProperties.AppendChild(new TableHeader()
                {
                    Val = OnOffOnlyValues.On
                });
            }
            wordRow.AppendChild(wordRowProperties);

            if (row.RowHeight.HasValue)
            {
                wordRowProperties.AppendChild(new TableRowHeight()
                {
                    Val = UInt32Value.FromUInt32((uint)row.RowHeight.Value)
                });
            }

            if (row.CantSplit)
            {
                wordRowProperties.AppendChild(new CantSplit());
            }

            foreach (var cell in row.Cells)
            {
                cell.InheritFromParent(row);
                wordRow.AppendChild(cell.Render(document, wordRow, context, documentPart, isAlternateRow, formatProvider));
            }

            return(wordRow);
        }