iText7 表数组

iText7 Array of Tables

提问人:Mat52 提问时间:10/5/2023 最后编辑:Mat52 更新时间:10/5/2023 访问量:36

问:

代码片段将编译,但在运行时会引发 NullReferenceException。它说“对象未设置为对象的实例”。该代码是在 VS2019 上使用 .NET Core 3.1 创建的。 我找不到任何证据证明此代码是否可以运行。 非常感谢您的帮助。

 class Program
    {        
        static PdfDocument pdfTable;
        static Document document;
        static string destination;
              
        static void Main()
        {            
            destination = Path.Combine(@"C:\Users\Administrator\Documents", "SRC_Selection.pdf");
            pdfTable = new PdfDocument(new PdfWriter(destination));
            document = new Document(pdfTable); 
            
            // some usual MySql-stuff here

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                List<Table> tables = new List<Table>();
                for(i = 0; i < 10; i++) tables.Add(new Table(1, true)); 
                Cell[] cell = new Cell[reader.FieldCount];

                int i = 0;
                while (reader.Read())
                { 
                   For (int j = 0; j < reader.FieldCount-1; j++)        
                   {
                        cell[j] = new Cell(1, 1)   
                          .SetFontSize(10)
                          .SetTextAlignment(TextAlignment.LEFT)
                          .Add(new Paragraph(reader.GetString(j)));
                
                        tables[i].AddCell(cell[j]);  // exception thrown here!
                   }

                   document.Add(tables[i]).Add(newline);
                   i++;
                }
            }
        }
    }
C# 数组 pdf nullreferenceexception itext7

评论

0赞 Muhammad Sulaiman 10/5/2023
请为问题添加更多上下文。.如何/被创造?在哪条指令下抛出异常?readerdocument
0赞 Mat52 10/5/2023
添加了更多代码来显示依赖项。代码中没有太多特殊之处,只有基本的数据库结构,其中 PDF 中的选定行被复制到新 PDF 文件的不同表中。这就像一个多项选择形式。
0赞 Mat52 10/5/2023
...同时找到了解决方案。我使用了List<Table>表,并通过Table(1, false)初始化了列表元素。然后,我可以按文档获取单个表。添加(tables[i]);

答:

0赞 Amit Mohanty 10/5/2023 #1

您得到的 NullReferenceException 可能是由于您声明了一个 Table 对象数组 (),但您尚未初始化该数组的每个元素。检查以下代码。Table[] table = new Table[10];

for (int j = 0; j < reader.FieldCount; j++)
{
    table[i] = new Table(reader.FieldCount - 1); // Initialize the table with the appropriate number of columns

    cell[j] = new Cell(1, 1)
        .SetFontSize(10)
        .SetTextAlignment(TextAlignment.LEFT)
        .Add(new Paragraph(reader.GetString(j)));

    table[i].AddCell(cell[j]);
}

评论

0赞 Mat52 10/5/2023
谢谢阿米特,我现在可以看到了。您的解决方案等效于具有列表元素的解决方案。我错过了初始化。