iText格式化表格

时间:2013-08-16 10:20:56

标签: java itext

我正在使用iText5库生成PDF文档(对于那些曾经见过他的人,仍然是)。赞美Bruno Lowagie;我发现它是一个非常棒的API!

但是,我的部分任务是格式化一些短语。我使用嵌套的PdfPTable来格式化数据,但是我遇到了奇怪的间距问题。这是我面临的问题的一个例子:

enter image description here

正如您所看到的那样,只有几个短语的行往往会在它们之间产生巨大的差距。我能理解为什么这种情况正在发生;上面的行正在拉伸表格。有没有办法让表格尽可能大,而且不能更大?

代码

生成价格集合

我正在使用此代码段创建价格:

 Paragraph pricePara = new Paragraph();
 pricePara.add(price);
 pricePara.add(generateBreakLine());
 pricePara.add(time);
 pricePara.add(generateBreakLine());
 allPrices.add(pricePara);

其中generateBreakLine()返回一个空的Paragraph对象。

将它们添加到单元格中

我使用以下代码段将它们添加到单元格中:

 // 5 is just the amount of prices we can fit on one line.
 PdfPTable pricesCellValue = new PdfPTable(elements.size() > 5 ? 5 : elements.size());
    // Make it appear that the prices are just horizontal, as opposed to in a table.
    pricesCellValue.getDefaultCell().setBorder(PdfPCell.NO_BORDER);

    // Cycle through each price. Add to cell. Add cell to the table.
    for (com.lowagie.text.Element elem : elements) {
        PdfPCell cell = new PdfPCell((Paragraph) elem);
        cell.setBorder(PdfPCell.NO_BORDER);
        cell.setPadding(2);
        pricesCellValue.addCell(cell);
    }
    return pricesCellValue; 

我相信上面的片段是我可以确保桌子只有它需要的宽度,而不是填满它周围的所有空间。我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

解决

找到了一种简单的修复方法。而不是根据价格数量更改列数,我确保列号始终为5,然后在空白单元格上添加:

  if(elements.size() < 5)
    {
        int diff = 5 - elements.size();

        for(int x = 0; x < diff; x++)
        {
            pricesCellValue.addCell(new Paragraph(" "));
        }
    }