用两个并行表生成PDF?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (37)

我正在尝试使用iTextSharp和电话簿数据的SQL表动态生成PDF。我的程序目前可以生成一个包含所有需要的数据的表格。

PDF的每个页面只有一个长表,尽管它在中间。我试图格式化PDF以使两个表格在页面上平行运行。当表到达页面底部时,我希望下一个PdfPRow成为下一个表的顶部。这是我当前的C#代码来尝试这一点。

我把我的表分成一个PdfPRows数组。然后,我遍历这些将每行添加到名为节的新表。当我想添加的行数已经增加时,然后将最后一个表格中的两个单元格中的一个嵌套在节表中。当我试图将这个最终表添加到PDF时,它会抛出这个错误:

iTextSharp.text.DocumentException:未将对象引用设置为对象的实例。iTextSharp.text.pdf.PdfDocument.Add(IElement element)at iTextSharp.text.Document.Add(IElement element)at _Default.Page_Load(Object sender,EventArgs e)in e:\ Inetpub \ wwwroot \ app \ cts \ phonebook \ DefaultPDF.aspx.cs:第211行

我认为这意味着决赛桌的某些部分从未初始化,但我不确定。第一个for循环之后的部分是我试图修复这个错误。这可能没有必要。

有没有更好的方法来做到这一点,或者我只是做错了?

提问于
用户回答回答于

根据提供的图像,这是我试图做的开始。

首先,一些知识。

  1. 2列中的数据不超过1页。如果是这样,这会变得更加复杂。
  2. PDF表格将单元格写入然后向下写入。使用3列的表格,它将在第一行中写入前3个单元格,然后在第2行中写入第4个单元格

我会用7个colmuns,6个数据和1个作为2个数据集之间的间隔器来设置最终表格。然后我会将这些行分成2个数组。您需要处理奇数的情况。然后,我将逐个单元格添加每行,从每个列表的第一行中写入表格的第一个数据行。

  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构造函数提供float [7]值而不是列数来控制列的宽度

扫码关注云+社区

领取腾讯云代金券