Itext,表格宽度在新页面中分割时会发生变化

时间:2015-02-25 09:17:58

标签: java itext

我将iText 5.3.4Eclipse Kepler一起使用。我有一张帐单表,通常它不会有多个页面,但是为了测试pourposes我已经检查了它的行为并且我遇到了一个奇怪的问题,表width页面更改时更改:

table width changes!

我的表格定义:

PdfPTable tableFactura = new PdfPTable(4);
tableFactura.setWidthPercentage(80f);
tableFactura.setWidths(new int[]{55, 15, 15, 15});
tableFactura.setKeepTogether(false);
tableFactura.setHeaderRows(1);

如果我定义不同的宽度,问题仍然存在,但是有另一个尺寸。

该表格填入for-loop,内有PdfCellParagraph,内容不复杂:

// ONE of the CELLS of each line
cell = new PdfPCell(new Paragraph(factura.get("descripcion_linea" + numeroLinea), tinyNormal));
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
cell.setPaddingLeft(10f);
cell.setPaddingTop(5f);
cell.setBorder(Rectangle.LEFT);
tableFactura.addCell(cell);

我的文档是标准的,Document document = new Document();,我尝试过包括document.setPageSize(PageSize.A4);,但没有任何变化。正如您在图像中看到的那样,我也尝试过没有内容的单元格。

知道为什么会这样吗?

@Bruno建议

更新1: Link To File

UPDATE2: here是一段代码"模拟"我正在做什么,但问题是正在发生

2 个答案:

答案 0 :(得分:1)

我从未使用iText,但我认为问题出在以下几行。

tableFactura.setWidthPercentage(80f);
tableFactura.setWidths(new int[]{55, 15, 15, 15});

您可以尝试以下两种情况并让我知道它是怎么回事吗?

案例1:设置宽度100%

tableFactura.setWidthPercentage(100f);
tableFactura.setWidths(new int[]{55, 15, 15, 15});

案例2:根据80%设置宽度

tableFactura.setWidthPercentage(80f);
tableFactura.setWidths(new int[]{50, 10, 10, 10});

如果没有,请检查此this question可能有帮助。

答案 1 :(得分:1)

好吧,我终于解决了。感谢@BrunoLowagie@Fahim Parkar

将根据所有建议快速解释我的所有修改:

首先并根据@Bruno条评论,首先删除了未使用的方法PdfPTable::setKeepTogether(boolean);

第二次,根据this question,由@Fahim发布(谢谢!)。我们可以在<{strong>>设置TotalWidth之前按PdfPTable::setLockedWitdth(boolean) 强制使用表的大小。

PdfPTable tableFactura = new PdfPTable(4);
tableFactura.setLockedWidth(true);
tableFactura.setTotalWidth(425f);
tableFactura.setWidths(new int[]{55, 15, 15, 15});

这允许表在所有页面中具有相同的大小...但并非全部完成,以避免在最后一行和分页符(包含单页或多页)中的奇怪行为我必须包括:

tableFactura.setSkipLastFooter(true);

第三:现在表限制是正确的,只需要纠正分页符,为我定义的页脚行。

tableFactura.setHeaderRows(2);
tableFactura.setFooterRows(1);

注意:根据PdfPTable::setFooterRows()

  

设置页脚使用的行数。从标题行中减去页脚行数。因此,在此示例中,第1行将是页脚,第2行将是标题。

第四:只是根据我的需要调整边距,边框和填充,我得到了我想要的确切结果。

TA DA! :)