public static void ApplyCellProperties(this TextWriter result, PrintElementTableCell element) { if (element == null) { return; } if (element.ColumnSpan != null) { result.Write("colspan=\""); result.Write(element.ColumnSpan); result.Write("\" "); } if (element.RowSpan != null) { result.Write("rowspan=\""); result.Write(element.RowSpan); result.Write("\" "); } }
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); }
public static void ApplyCellStyles(TableCell elementContent, PrintElementTableCell element) { //Base if (!string.IsNullOrWhiteSpace(element.Name)) { elementContent.Name = element.Name; } if (element.Font != null) { if (!string.IsNullOrWhiteSpace(element.Font.Family)) { elementContent.FontFamily = new FontFamily(element.Font.Family); } if (element.Font.Size != null) { elementContent.FontSize = element.Font.Size.Value; } if (element.Font.Style != null) { elementContent.FontStyle = GetFontStyle(element.Font.Style.Value); } if (element.Font.Stretch != null) { elementContent.FontStretch = GetFontStretch(element.Font.Stretch.Value); } if (element.Font.Weight != null) { elementContent.FontWeight = GetFontWeight(element.Font.Weight.Value); } if (element.Font.Variant != null) { elementContent.Typography.Variants = GetFontVariant(element.Font.Variant.Value); } } var converter = new BrushConverter(); if (!string.IsNullOrWhiteSpace(element.Foreground)) { try { elementContent.Foreground = (Brush)converter.ConvertFromString(element.Foreground); } catch { // ignored } } if (!string.IsNullOrWhiteSpace(element.Background)) { try { elementContent.Background = (Brush)converter.ConvertFromString(element.Background); } catch { // ignored } } //Block if (element.Border != null) { elementContent.BorderThickness = new Thickness( element.Border.Thickness.Left, element.Border.Thickness.Top, element.Border.Thickness.Right, element.Border.Thickness.Bottom ); if (!string.IsNullOrWhiteSpace(element.Border.Color)) { try { elementContent.BorderBrush = (Brush)converter.ConvertFromString(element.Border.Color); } catch { //ignore } } } elementContent.Padding = new Thickness( element.Padding.Left, element.Padding.Top, element.Padding.Right, element.Padding.Bottom ); if (element.TextAlignment != null) { elementContent.TextAlignment = GetTextAlignment(element.TextAlignment.Value); } if (element.ColumnSpan != null) { elementContent.ColumnSpan = element.ColumnSpan.Value; } if (element.RowSpan != null) { elementContent.RowSpan = element.RowSpan.Value; } }
public static void ApplyCellStyles(this TextWriter result, PrintElementTableCell element) { if (element == null) { return; } if (element.Font != null) { if (!string.IsNullOrWhiteSpace(element.Font.Family)) { result.Write("font-family:"); result.Write(element.Font.Family); result.Write(";"); } if (element.Font.Size != null) { result.Write("font-size:"); result.WriteInvariant(element.Font.Size); result.Write("px;"); } if (element.Font.Style != null) { result.Write("font-style:"); result.Write(GetFontStyle(element.Font.Style.Value)); result.Write(";"); } if (element.Font.Stretch != null) { result.Write("font-stretch:"); result.Write(GetFontStretch(element.Font.Stretch.Value)); result.Write(";"); } if (element.Font.Weight != null) { result.Write("font-weight:"); result.Write(GetFontWeight(element.Font.Weight.Value)); result.Write(";"); } } if (!string.IsNullOrWhiteSpace(element.Background)) { result.Write("background-color:"); result.Write(element.Background.TryToRgba()); result.Write(";"); } if (!string.IsNullOrWhiteSpace(element.Foreground)) { result.Write("color:"); result.Write(element.Foreground.TryToRgba()); result.Write(";"); } if (element.Border != null) { result.Write("border-top-width:"); result.WriteInvariant(element.Border.Thickness.Top); result.Write("px;"); result.Write("border-right-width:"); result.WriteInvariant(element.Border.Thickness.Right); result.Write("px;"); result.Write("border-bottom-width:"); result.WriteInvariant(element.Border.Thickness.Bottom); result.Write("px;"); result.Write("border-left-width:"); result.WriteInvariant(element.Border.Thickness.Left); result.Write("px;"); if (!string.IsNullOrWhiteSpace(element.Border.Color)) { result.Write("border-style:solid;"); result.Write("border-color:"); result.Write(element.Border.Color.TryToRgba()); result.Write(";"); } } result.Write("padding-top:"); result.WriteInvariant(element.Padding.Top); result.Write("px;"); result.Write("padding-right:"); result.WriteInvariant(element.Padding.Right); result.Write("px;"); result.Write("padding-bottom:"); result.WriteInvariant(element.Padding.Bottom); result.Write("px;"); result.Write("padding-left:"); result.WriteInvariant(element.Padding.Left); result.Write("px;"); if (element.TextAlignment != null) { result.Write("text-align:"); result.Write(GetTextAligment(element.TextAlignment.Value)); result.Write(";"); } }
public void ShouldBuildTable() { //Given var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext(); var element = new PrintElementTable(); var result = new TextWriterWrapper(); var text1 = new PrintElementRun { Text = "Text11, colspan = 2" }; var cell1 = new PrintElementTableCell { ColumnSpan = 2, Border = new PrintElementBorder { Thickness = new PrintElementThickness(1), Color = "black" } }; var par1 = new PrintElementParagraph(); par1.Inlines.Add(text1); cell1.Block = par1; var row1 = new PrintElementTableRow(); row1.Cells.Add(cell1); var text21 = new PrintElementRun { Text = "Text21" }; var cell21 = new PrintElementTableCell { Border = new PrintElementBorder { Thickness = new PrintElementThickness(1), Color = "black" } }; var par21 = new PrintElementParagraph(); par21.Inlines.Add(text21); cell21.Block = par21; var row2 = new PrintElementTableRow(); row2.Cells.Add(cell21); var text22 = new PrintElementRun { Text = "Text22" }; var cell22 = new PrintElementTableCell { Border = new PrintElementBorder { Thickness = new PrintElementThickness(1), Color = "black" } }; var par22 = new PrintElementParagraph(); par22.Inlines.Add(text22); cell22.Block = par22; row2.Cells.Add(cell22); var column1 = new PrintElementTableColumn { Size = 100 }; var column2 = new PrintElementTableColumn { Size = 200 }; element.Columns.Add(column1); element.Columns.Add(column2); element.Rows.Add(row1); element.Rows.Add(row2); //When context.Build(element, result.Writer); //Then Assert.AreEqual(Resources.ResultTestShouldBuildTable, result.GetText()); }