我在试图生成PdfPTable并在将其添加到文档之前计算其高度时遇到问题。 PdfPTable的方法calculateHeights
返回的高度比页面的高度大很多(而该表是约1/4页的身高),所以我写了一个方法来计算高度:无法正确计算pdfPTable/PdfPCell高度
protected Float getVerticalSize() throws DocumentException, ParseException, IOException {
float overallHeight=0.0f;
for(PdfPRow curRow : this.getPdfObject().getRows()) {
float maxHeight = 0.0f;
for(PdfPCell curCell : curRow.getCells()) {
if(curCell.getHeight()>maxHeight) maxHeight=curCell.getHeight();
}
overallHeight+=maxHeight;
}
return overallHeight;
}
其中getPdfObject
方法返回一个PdfPTable对象。
使用调试器我发现单元格的矩形的lly和ury坐标差异(因此高度)比向文档中添加表格后看起来要大得多(例如,一个单元格为20,另一个单元格为38高度而他们在页面上看起来像一样)。没有什么在细胞除了其与块的段落:
Font f = getFont();
if (f != null) {
int[] color = getTextColor();
if(color != null) f.setColor(color[0],color[1],color[2]);
ch = new Chunk(celltext, f);
par = new Paragraph(ch);
}
cell = new PdfPCell(par);
cell.setHorizontalAlignment(getHorizontalTextAlignment());
cell.setVerticalAlignment(getVerticalTextAlignment());
然后又增加了一个表中的单元格和setWidthPercentage
属性设置为一些浮动。 我在做什么错?为什么细胞的比例与我在生成PDF后看到的不同?也许我正在计算错误的高度?是不是它在PDF页面上的单元格的高度应该严格地是lly和ury坐标之间的差异
对不起,我没有显示确切的代码,因为PDF正在使用许多中间步骤和对象生成XML这是不是很有用的“原样”我猜...
在此先感谢!
非常感谢Bruno! 出于某种原因,我认为'setWidthPercentage'也有诀窍。也许是因为桌子的高度不是零,而当我在以前寻找答案时,未渲染的桌子将其高度返回为零。我将尝试计算表格的宽度并设置这些属性。 –
更新:计算并设置确切的宽度后,现在一切正常。非常感谢你的回答和这个很酷的乐器! –