我正在尝试使用iTextSharp动态生成带有电话簿数据的SQL表的PDF。我的程序目前可以生成一个包含所有需要的数据的表。
不过,PDF的每一页都只有一张长长的表格在中间。我正在尝试格式化的PDF有两个表平行运行在页面上。当表格到达页面底部时,我希望下一个PdfPRow成为下一个表格的顶部。这是我当前尝试使用的C#代码。
我将我的表分解成一个PdfPRows数组。然后,我遍历它们,将每一行添加到一个名为section的新表中。当添加了所需的行数后,我就会嵌套区段表,这是最终表上两个单元格中的一个。当我尝试将这个最后的表添加到PDF时,它抛出了这个错误:
iTextSharp.text.DocumentException:对象引用未设置为对象的实例。在e:\Inetpub\wwwroot\app\cts\phonebook\DefaultPDF.aspx.cs:line 211中的iTextSharp.text.pdf.PdfDocument.Add(IElement元素)在_Default.Page_Load(对象发送者,EventArgs e)的iTextSharp.text.Document.Add(IElement元素)
我认为这意味着最终表的某些部分从未初始化,但我不确定。第一个for循环之后的部分是我试图修复这个错误。这可能不是必须的。
有没有更好的方法来做这件事,还是我做错了?
发布于 2018-06-01 03:52:59
基于所提供的图像,这是我尝试作为开始所做的。
首先,有几个常识。
中写入第4个单元格
我会将最终的表设置为7个列,6个包含数据,1个作为两个数据集之间的间隔符。然后,我会将行拆分为两个数组。您将需要处理奇数的情况。然后,我将逐个单元格添加每个行,从每个列表中取出第一行,以写入表的第一个数据行。
PdfPTable FinalTableN = new PdfPTable( 7 );
PdfPRow[] n = PDFtableN.Rows.ToArray();
int half = n.Length/2;
PdfPRow[] s1 = new PdfPRow[half];
PdfPRow[] s2 = new PdfPRow[half];
for (int h = 0; h < half; h++ )
s1[h] = n[h];
for ( int h = half; h < n.Length; h++ )
s2[h-half] = n[h];
for ( int h = 0; h < half; h++ ) {
FinalTableN.AddCell( s1[h].GetCells()[0] );
FinalTableN.AddCell( s1[h].GetCells()[1] );
FinalTableN.AddCell( s1[h].GetCells()[2] );
FinalTableN.AddCell( "" );
FinalTableN.AddCell( s2[h].GetCells()[0] );
FinalTableN.AddCell( s2[h].GetCells()[1] );
FinalTableN.AddCell( s2[h].GetCells()[2] );
}
通过向PdfPTable构造函数提供值的float7而不是列数,可以控制列的宽度
https://stackoverflow.com/questions/50631257
复制相似问题