如何在java中使用iText设计pdf时修复行数

时间:2013-04-04 12:33:31

标签: itext

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

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

问题是: 在行的末尾,总薪水不适合同一页面,并显示在下一页上。

那么有什么方法可以计算页面的高度然后修复每个单元格的高度?然后相应地限制行数。

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

1 个答案:

答案 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()方法删除最后一行,并在下一页的新表中重新创建它。

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