itext向下添加表格单元格数据

时间:2019-06-08 17:44:57

标签: c# pdf itext itext7

我有这样的代码

string[] data = new string[] { "1", "2", "3", "4", "5", "6", "7", "8",
                            "9", "10", "11", "12", "13", "14",
            "1", "2", "3", "4", "5", "6", "7", "8",
                            "9", "10", "11", "12", "13", "14",
            "1", "2", "3", "4", "5", "6", "7", "8",
                            "9", "10", "11", "12", "13", "14",
            "1", "2", "3", "4", "5", "6", "7", "8",
                            "9", "10", "11", "12", "13", "14",
            "1", "2", "3", "4", "5", "6", "7", "8",
            "1", "2", "3", "4", "5", "6", "7", "8",
                            "9", "10", "11", "12", "13", "14",
                            "9", "10", "11", "12", "13", "14",};
            using (PdfWriter writer = new PdfWriter(destinationFile))
            {
                // Creating a PdfDocument object       
                using (PdfDocument pdfDoc = new PdfDocument(writer))
                {
                    // Creating a Document object       
                    using (Document doc = new Document(pdfDoc))
                    {
                        // Creating a table       
                        float[] pointColumnWidths1 = { 150f, 150f, 150f, 150f };
                        Table table = new Table(pointColumnWidths1);

                        Cell cell;
                        float[] pointColumnWidths2 = { 150f };
                        Table nestedTable = new Table(pointColumnWidths2);
                        for (int y = 0; y < data.Length; y++)
                        {
                            cell = new Cell();
                            cell.Add(data[y]);


                            nestedTable.AddCell(cell);

                        }

                        table.AddCell(nestedTable);

                        doc.Add(table);

                        doc.Close();
                    }

                }

            }

这是输出

enter image description here

我正在做的是使用itext而不是itextsharp填充四个表列。

好的,嵌套表到目前为止已经可以使用了。但是如果将data数组填充为最多100个字符串数组。我收到错误

System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.

我认为错误是因为填充的嵌套表对于父表太大了吗?

因此,如果嵌套表太大,我该如何调整它。一些数据将写入下一列。我无法真正解决自己的问题,所以我在这里问一个问题。

很抱歉,问题不完整。

这是错误

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at System.Collections.Generic.List`1.set_Item(Int32 index, T value)
   at iText.Layout.Renderer.TableRenderer.UpdateFirstRowBorders(Int32 colN)
   at iText.Layout.Renderer.TableRenderer.CollapseAllBorders()
   at iText.Layout.Renderer.TableRenderer.Layout(LayoutContext layoutContext)
   at iText.Layout.Renderer.RootRenderer.AddChild(IRenderer renderer)
   at iText.Layout.RootElement`1.Add(IBlockElement element)
   at iText.Layout.Document.Add(IBlockElement element)
   at PdfItextSample.Program.CreatePdf(String destinationFile, List`1 lst) 

它指向行

doc.Add(table);

非常感谢您

1 个答案:

答案 0 :(得分:0)

我假设您使用的是iText7较旧的版本(可能是7.0.x?),因为您使用了

string[] data = ...;
...
cell.Add(data[y]);

Cell.Add(string)已于大约2年前从iText7 API中删除。

为了使您的代码可在当前的iText7上运行,我将Add调用替换为

cell.Add(new Paragraph(data[y]));

简单替换之后,您的代码就可以与当前的iText 7.1.7 SNAPSHOT和7.1.6版本一起运行了。

实际上,已经完成了很多工作,尤其是在表创建代码中。因此,您似乎遇到了与此固定表相关的错误。

要继续,您应该更新。