【问题标题】:Preventing iTextSharp from putting a page break in the middle of a PdfPTable?防止 iTextSharp 在 PdfPTable 中间放置分页符?
【发布时间】:2013-01-02 18:01:40
【问题描述】:

我正在使用 iTextSharp v5.3 构建一个包含一个或多个表格的 PDF,这些表格具有相同的单元格,但由于动态内容,高度可能会有所不同。目前,如果PdfPTable 太大而无法放在当前页面上,则表格将被破坏,剩余的单元格数据最终会出现在下一页上。有没有办法告诉 iTextSharp 如果表格不适合,将 整个东西 放在下一页上?

我尝试过使用SplitRowsSplitLate,但它们没有达到预期的效果。在将PdfPTable 添加到文档后,我还尝试进行一些计算,但无法弄清楚如何获取页面上的“光标位置”。我是否需要在循环中跟踪当前页面的高度并自己进行所有计算?

【问题讨论】:

  • 将记录模板添加为新的 pdfptable(主表的每个单元格,应该包含一个 pdfptabe。现在 SplitRows 和 SplitLate 应该根据整个对象的高度工作)。

标签: pagination itextsharp


【解决方案1】:

你也可以使用:

tableName.KeepTogether = true;

【讨论】:

  • 比计算高度要好得多......正是我想要的!
  • 这必须是首选答案。
【解决方案2】:

您可以询问桌子的总高度。这样做是这样的:table.TotalHeight

如果高度为 0,请确保首先定义了宽度:如果 iText 不知道渲染表格的可用宽度,则 iText 无法计算宽度。

确定高度后,向作者询问垂直位置:writer.GetVerticalPosition(true)

您可能知道,页面底部的 Y 坐标为 0。如果垂直位置减去页面总高度超过页边距大小,就知道表格放不下,可以触发新页面。

【讨论】:

  • 如何获得“页面总高度”?
  • 您在创建文档对象时自己定义该高度。只需减去边距。默认情况下,会创建一个 A4 页面 (842),边距为 36。因此,除非您定义了其他页面大小和边距,否则默认高度为 770。
  • 你必须解释为什么GetVerticalPosition 不适合你。它适用于批准并投票支持此答案的人。另外:评论部分不是发布此类附加问题的地方。创建一个新问题并以不同于“它不起作用”的方式表达它。见lowagie.com/doesntwork
【解决方案3】:

Bruno Lowagie 指出了正确的解决方案 - 我想添加将表格缩小到页面的可能性,即使它太大了。 看这里:Is it possible to "shrink" a PdfPtable?

【讨论】:

    【解决方案4】:

    可能不是“正确”的方式,但您可以将表格包装在单单元容器表格中。单个单元格不能一分为二。

    【讨论】:

    • 我该怎么做?
    • 您可以使用以下内容: PdfPTable ContainerTable = new PdfPTable(1); ContainerTable .WidthPercentage = 100; PdfPCell ContainerTableCell = new PdfPCell(); // 将你的东西添加到 ContainerTableCell。
    • 看在上帝的份上。评论只能编辑5分钟?我这里不能格式化多行代码,所以see this gist instead
    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 2014-10-06
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2013-04-15
    • 2014-05-18
    • 2011-01-20
    相关资源
    最近更新 更多