Exemplo n.º 1
0
        public override Table AppendTable(CreateTableParameters parameters)
        {
            var table = base.AppendTable(parameters);

            AppendParagraph();             // This is critical for correct behavior
            return(table);
        }
Exemplo n.º 2
0
        internal static Table Create(CreateTableParameters parameters, DocumentContentContainer parent)
        {
            if (parameters.Rows < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(parameters.Rows), parameters.Rows, "Rows must be greater than 0");
            }

            if (parameters.ColumnWidths.Length < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(parameters.ColumnWidths), parameters.ColumnWidths.Length, "ColumnWidths must not be empty");
            }

            var columnWidths    = parameters.ColumnWidths;
            var columnWidthUnit = parameters.ColumnWidthUnit;

            int[] computedColumnWidths = columnWidths.Select(value => ComputeWidth(columnWidthUnit, value)).ToArray();

            if (columnWidthUnit == WidthUnit.Pc)             // Fixing the last width so the sum of Pct widths equals 5000 for LibreOffice
            {
                computedColumnWidths[computedColumnWidths.Length - 1] += 5000 - computedColumnWidths.Sum();
            }

            var tbl = new XElement(Namespaces.w + "tbl");

            // //This code below is commented out as it does not actually impact behavior
            // if (parameters.ColumnWidthUnit != WidthUnit.Pc)
            // {
            //  var tableGrid = new XElement(Namespaces.w + "tblGrid");
            //  foreach (var c in computedColumnWidths)
            //      tableGrid.Add(new XElement(Namespaces.w + "gridCol", new XAttribute(Namespaces.w + "w", c)));
            //
            //  tbl.Add(tableGrid);
            // }

            for (var r = 0; r < parameters.Rows; r++)
            {
                var row = new XElement(Namespaces.w + "tr");

                foreach (var c in computedColumnWidths)
                {
                    var cell = CreateTableCell(columnWidthUnit == WidthUnit.Pc, c);
                    row.Add(cell);
                }

                tbl.Add(row);
            }

            var table = new Table(tbl, parent);

            var properties = table.Properties;

            properties.StyleId    = parameters.Style;
            properties.LayoutType = TableLayoutType.Fixed;

            if (parameters.TableWidth.HasValue && parameters.TableWidthUnit.HasValue)
            {
                if (parameters.TableWidthUnit == WidthUnit.Pc)
                {
                    properties.PreferredWidthFp = ComputeWidth(WidthUnit.Pc, parameters.TableWidth.Value);
                }
                else
                {
                    properties.PreferredWidthTw = ComputeWidth(parameters.TableWidthUnit.Value, parameters.TableWidth.Value);
                }
            }

            return(table);
        }