【问题标题】:Generating a PDF with two parallel tables使用两个并行表生成 PDF
【发布时间】:2018-05-31 19:11:00
【问题描述】:

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

PDF 的每一页只有一张长桌在中间。我正在尝试格式化 PDF 以使两个表格在页面下方平行运行。当表格到达页面底部时,我希望下一个 PdfPRow 成为下一个表格的顶部。这是我当前尝试执行此操作的 C# 代码。

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

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

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

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

【问题讨论】:

  • 您能发布生成表格的相关代码吗?
  • 永远不可能有使用PdfPRow 类的理由。这是一个内部类;保持内部。您使用的是旧版本的 iText(我们不再称它为 iTextSharp)。使用最新版本:iText 7.1.2,您想要实现的目标要简单得多。因此,如果您想在代码方面取得进步并面向未来,请升级。
  • 您做错的一件事:将代码发布为屏幕截图。您应该始终将代码作为代码发布。您做错的另一件事:没有提及您正在使用的 iText 版本。

标签: c# asp.net pdf itext


【解决方案1】:

根据提供的图片,这是我将尝试做的开始。

首先,有几个已知的。

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

我会用 7 个 colmun 设置决赛桌,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] 值而不是列数来控制列的宽度

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2021-04-11
    • 2016-03-29
    相关资源
    最近更新 更多