Пример #1
0
        private static PrintElementBuildContext CreateContentContext(PrintElementParagraph element, PrintElementBuildContext buildContext)
        {
            var contentWidth = (element.Border != null)
                        ? BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, element.Border.Thickness)
                        : BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding);

            return(buildContext.Create(contentWidth));
        }
Пример #2
0
        private static PrintElementBuildContext CreateItemContext(PrintElementList element, PrintElementBuildContext buildContext)
        {
            var contentWidth = (element.Border != null)
                ? BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, element.Border.Thickness, new PrintElementThickness(element.MarkerOffsetSize))
                : BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, new PrintElementThickness(element.MarkerOffsetSize));

            return(buildContext.Create(contentWidth));
        }
Пример #3
0
        public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata)
        {
            var element = new PrintViewDocument
            {
                Font = new PrintElementFont {
                    Family = BuildHelper.DefautlFontFamily
                }
            };

            // Установка стилей печатного представления
            ApplyPrintViewStyles(buildContext, elementMetadata.Styles);

            // Установка общих свойств печатного представления
            BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.ApplyTextProperties(element, elementMetadata);

            // Настройка размеров страницы печатного представления
            ApplyPageSize(element, elementMetadata.PageSize);
            ApplyPagePadding(element, elementMetadata.PagePadding);

            // Настройка размеров колонки печатного представления
            var contentWidth = CalcContentWidth(element);

            // Генерация содержимого печатного представления

            var contentContext = buildContext.Create(contentWidth);
            var blocks         = buildContext.ElementBuilder.BuildElements(contentContext, elementMetadata.Blocks);

            if (blocks != null)
            {
                foreach (var block in blocks)
                {
                    element.Blocks.Add(block);
                }
            }

            BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle);
            BuildHelper.PostApplyTextProperties(element, elementMetadata);

            return(element);
        }
        private static PrintElementTableRow CreateDynamicTableRow(PrintElementBuildContext buildContext, PrintElementTable table, dynamic columns, object rowSource)
        {
            var tableRow = new PrintElementTableRow();

            if (columns != null)
            {
                var rowContext = buildContext.Create(buildContext.ElementWidth);
                rowContext.ElementSourceValue = rowSource;

                var columnIndex = 0;

                foreach (var column in columns)
                {
                    var cellMetadata = column.CellTemplate;
                    var tableCell    = CreateTableCell(rowContext, table, columnIndex, cellMetadata, false);
                    tableRow.Cells.Add(tableCell);

                    ++columnIndex;
                }
            }

            return(tableRow);
        }
        private static PrintElementTableCell CreateTableCell(PrintElementBuildContext buildContext, PrintElementTable table, int columnIndex, dynamic cellMetadata, bool applySpan)
        {
            var tableCell = new PrintElementTableCell
            {
                ColumnSpan = 1,
                RowSpan    = 1,
                Border     = new PrintElementBorder
                {
                    Thickness = new PrintElementThickness(0, 0, 1, 1),
                    Color     = PrintElementColors.Black
                },
                Padding = BuildHelper.DefaultPadding
            };

            if (cellMetadata != null)
            {
                var cellStyle = buildContext.FindStyle(cellMetadata.Style);

                // Установка общих свойств для текста
                BuildHelper.ApplyTextProperties(tableCell, cellStyle);
                BuildHelper.ApplyTextProperties(tableCell, cellMetadata);

                // Установка общих свойств ячейки таблицы
                BuildHelper.ApplyTableCellProperties(tableCell, cellStyle);
                BuildHelper.ApplyTableCellProperties(tableCell, cellMetadata);

                // Объединение ячеек по горизонтали и вертикали
                if (applySpan)
                {
                    tableCell.ColumnSpan = GetCellSpan(cellMetadata.ColumnSpan);
                    tableCell.RowSpan    = GetCellSpan(cellMetadata.RowSpan);
                }

                // Вычисление ширины ячейки для размещения содержимого

                var cellWidth = 0.0;

                for (var i = columnIndex; (i < columnIndex + tableCell.ColumnSpan) && (i < table.Columns.Count); ++i)
                {
                    cellWidth += table.Columns[i].Size.Value;
                }

                cellWidth = BuildHelper.CalcContentWidth(cellWidth, tableCell.Padding, tableCell.Border.Thickness);

                // Создание содержимого и помещение его в ячейку

                var cellContext = buildContext.Create(cellWidth);
                var cellContent = buildContext.ElementBuilder.BuildElement(cellContext, cellMetadata.Block);

                if (cellContent is PrintElementBlock)
                {
                    tableCell.Block = cellContent;
                }

                // Пост-установка общих свойств для текста
                BuildHelper.PostApplyTextProperties(tableCell, cellStyle);
                BuildHelper.PostApplyTextProperties(tableCell, cellMetadata);
            }

            buildContext.MapElement(tableCell, cellMetadata);

            return(tableCell);
        }