我正在创建一个pdf文件,显示所有员工及其工资的列表。在页面的末尾显示所有工资的总和。
我正在使用for循环向表中添加多行。
问题是: 在行的末尾,总薪水不适合同一页面,并显示在下一页上。
那么有什么方法可以计算页面的高度然后修复每个单元格的高度?然后相应地限制行数。
因此,在页面的末尾,我可以显示总行数,并从下一页开始进一步记录。
答案 0 :(得分:2)
计算页面的高度:嗯......您在创建Document
对象时决定页面的大小。您可以选择任何您想要的尺寸。
计算PdfPTable
的高度:my book第4章中对此进行了解释。创建PdfPTable
时,将PdfPCell
个对象添加到仅存在于内存中且对页面大小一无所知的对象。默认情况下,宽度表示为您要添加PdfPTable
的页面的可用宽度的百分比。只有当您将PdfPTable
添加到特定Document
时,才会计算出确切的宽度和高度(这对您来说太迟了)。
如果您想提前知道高度,则需要定义绝对宽度(不是百分比)。具有相同内容和不同宽度的表将具有不同的高度。定义绝对宽度是like this:
table.setTotalWidth(width);
table.setLockedWidth(true);
在此代码段(取自TableHeight示例)中,width
等于页面宽度减去左右边距。您在创建Document
对象时定义页面宽度和边距。默认情况下,页面大小为A4,因此默认宽度为595个用户单位,默认边距为36个用户单位。
因此,解决问题的一种方法是在循环中添加行,并使用getRowHeight()
方法计算每行的高度,或使用getTotalHeight()
方法计算整个表的高度(如果省略设置总高度,则两个方法都将返回0)。如果您发现没有足够的空间来添加摘要行,则可以使用deleteLastRow()
方法删除最后一行,并在下一页的新表中重新创建它。
这是一个解决方案。另一种解决方案可能是使用表格和单元格事件,但这更难以解释。