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);
        }
示例#3
0
        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(";");
            }
        }
示例#5
0
        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());
        }