我正在使用iText5
库生成PDF文档(对于那些曾经见过他的人,仍然是)。赞美Bruno Lowagie;我发现它是一个非常棒的API!
但是,我的部分任务是格式化一些短语。我使用嵌套的PdfPTable
来格式化数据,但是我遇到了奇怪的间距问题。这是我面临的问题的一个例子:
正如您所看到的那样,只有几个短语的行往往会在它们之间产生巨大的差距。我能理解为什么这种情况正在发生;上面的行正在拉伸表格。有没有办法让表格尽可能大,而且不能更大?
代码
生成价格集合
我正在使用此代码段创建价格:
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;
我相信上面的片段是我可以确保桌子只有它需要的宽度,而不是填满它周围的所有空间。我该怎么做呢?
答案 0 :(得分:1)
找到了一种简单的修复方法。而不是根据价格数量更改列数,我确保列号始终为5,然后在空白单元格上添加:
if(elements.size() < 5)
{
int diff = 5 - elements.size();
for(int x = 0; x < diff; x++)
{
pricesCellValue.addCell(new Paragraph(" "));
}
}