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)); }
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)); }
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); }