阻止iTextSharp在PdfPTable中间放置分页符?

时间:2013-01-02 18:01:40

标签: pagination itextsharp

我正在使用iTextSharp v5.3来构建一个PDF,其中包含一个或多个具有相同单元格的表格,但由于动态内容而导致高度不同。目前,如果PdfPTable太大而无法放在当前页面上,则该表将被破坏,剩余的单元格数据将在下一页上结束。有没有办法告诉iTextSharp,如果表格不合适,将整件事放在下一页?

Bad Table Break

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

4 个答案:

答案 0 :(得分:6)

你也可以使用tableName.KeepTogether = True

答案 1 :(得分:4)

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

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

一旦你有了高度,请向作者询问垂直位置:writer.GetVerticalPosition(true)

您可能知道,页面底部的Y坐标为0。如果垂直位置减去页面总高度超出了边距大小,则表示该表格不适合,您可以触发新页面。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

可能不是“正确”的方式,但您可以将表包装在单个单元容器表中。单个细胞不能分成两半。