使用两个并行表生成PDF

时间:2018-05-31 19:11:01

标签: c# asp.net pdf itext

我正在尝试使用带有SQL电话簿数据表的iTextSharp动态生成PDF。我的程序当前可以生成一个包含所有需要数据的表。 Table of phone book data

PDF的每个页面只有一个长桌在中间运行。我正在尝试格式化PDF以使两个表在页面上并行运行。当表到达页面底部时,我希望下一个PdfPRow成为下一个表的顶部。这是我目前的C#代码来尝试这个。 This is my current C# code to attempt this.

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

  

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

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

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

1 个答案:

答案 0 :(得分:0)

根据提供的图像,我将尝试这样做。

首先,有几个知识。

  1. 2列中的数据不超过1页。如果是这样,这会变得更复杂。
  2. Pdf表将单元格写入然后向下。使用3列的表,它将在第一行中写入前3个单元格,然后在第2行中写入第4个单元格
  3. 我将最终表格设置为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]而不是列数来控制列的宽度