如何在java中使用iText设计pdf时固定行数

如何在java中使用iText设计pdf时固定行数,itext,Itext,我正在创建一个pdf文件,显示所有员工及其工资的列表。在页面的末尾,它显示了所有工资的总额 我使用for循环向表中添加多行 问题是: 在该行的末尾,工资总额不在同一页上,将显示在下一页上 有没有办法计算页面的高度,然后确定每个单元格的高度?然后相应地限制行数 因此,在页面末尾,我可以显示总行数并进一步记录下一页的行数。计算页面高度:嗯。。。创建文档对象时,您可以决定页面的大小。你可以选择你想要的任何尺寸 计算PdfPTable:的第4章对此进行了解释。创建PdfPTable时,将PdfPCell

我正在创建一个pdf文件,显示所有员工及其工资的列表。在页面的末尾,它显示了所有工资的总额

我使用for循环向表中添加多行

问题是: 在该行的末尾,工资总额不在同一页上,将显示在下一页上

有没有办法计算页面的高度,然后确定每个单元格的高度?然后相应地限制行数


因此,在页面末尾,我可以显示总行数并进一步记录下一页的行数。

计算页面高度:嗯。。。创建
文档
对象时,您可以决定页面的大小。你可以选择你想要的任何尺寸

计算
PdfPTable
:的第4章对此进行了解释。创建
PdfPTable
时,将
PdfPCell
对象添加到只存在于内存中且不知道页面大小的对象中。默认情况下,宽度表示为将添加
PdfPTable
的页面可用宽度的百分比。只有将
PdfPTable
添加到特定的
文档
时,才会计算准确的宽度和高度(这对您来说太晚了)

如果希望提前知道高度,则需要定义绝对宽度(而不是百分比)。具有相同内容和不同宽度的表将具有不同的高度。定义绝对宽度的操作已完成:

在这个片段中(取自示例),
width
等于页面宽度减去左右边距。在创建
文档时定义页面宽度和页边距。默认情况下,页面大小为A4,因此默认宽度为595个用户单位,默认边距为36个用户单位

因此,解决问题的一种方法是在循环中添加行,并使用
getRowHeight()
方法计算每行的高度,或者使用
getTotalHeight()
方法计算整个表的高度(如果忽略设置总高度,这两种方法都将返回0)。如果发现没有足够的空间添加摘要行,可以使用
deleteLastRow()
方法删除最后一行,并在下一页的新表中重新创建它


这是一个解决方案。另一个解决方案可能是使用表和单元格事件,但这更难解释。

@moskito-x请不要用错误的格式混乱人们的帖子。你的编辑不应该得到机器人的批准。不要在非代码的东西上使用代码格式。不要添加奇怪的粗体文字和OP没有引入的奇怪强调。如果你决定编辑一篇文章,那么也要修正基本的语法错误,或者干脆别管它了。非常感谢。
table.setTotalWidth(width);
table.setLockedWidth(true);