我将iText 5.3.4
与Eclipse Kepler
一起使用。我有一张帐单表,通常它不会有多个页面,但是为了测试pourposes我已经检查了它的行为并且我遇到了一个奇怪的问题,表width
页面更改时更改:
我的表格定义:
PdfPTable tableFactura = new PdfPTable(4);
tableFactura.setWidthPercentage(80f);
tableFactura.setWidths(new int[]{55, 15, 15, 15});
tableFactura.setKeepTogether(false);
tableFactura.setHeaderRows(1);
如果我定义不同的宽度,问题仍然存在,但是有另一个尺寸。
该表格填入for-loop
,内有PdfCell
和Paragraph
,内容不复杂:
// 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是一段代码"模拟"我正在做什么,但问题是不正在发生
答案 0 :(得分:1)
我从未使用iText,但我认为问题出在以下几行。
tableFactura.setWidthPercentage(80f);
tableFactura.setWidths(new int[]{55, 15, 15, 15});
您可以尝试以下两种情况并让我知道它是怎么回事吗?
tableFactura.setWidthPercentage(100f);
tableFactura.setWidths(new int[]{55, 15, 15, 15});
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! :)