我在試圖生成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'也有訣竅。也許是因爲桌子的高度不是零,而當我在以前尋找答案時,未渲染的桌子將其高度返回爲零。我將嘗試計算表格的寬度並設置這些屬性。 –
更新:計算並設置確切的寬度後,現在一切正常。非常感謝你的回答和這個很酷的樂器! –