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