我在尝试生成 PdfPTable 并在将其添加到文档之前计算其高度时遇到问题。方法calculateHeights
PdfPTable 返回的高度比页面的高度大很多(而表格大约是页面高度的 1/4),所以我编写了一个计算高度的方法:
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;
}
where 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 生成的,我想“按原样”它并不是很有用......
提前致谢!
添加到可用宽度为 400 的页面的表格高度与添加到可用宽度为 1000 的页面的表格的高度不同。无法正确测量高度直到宽度被定义。
可以通过将表格添加到文档来定义宽度。一旦表格被渲染出来,总高度就已知了。
如果想提前知道高度,就需要提前定义宽度。例如通过使用:
table.setTotalWidth(400);
table.setLockedWidth(true);
这在TableHeight http://itextpdf.com/examples/iia.php?id=80例子。在表格高度.pdf http://examples.itextpdf.com/results/part1/chapter04/table_height.pdf,您会看到 iText 返回高度 0before添加一张桌子,高度为 48after添加表。 iText 最初返回 0,因为无法确定实际高度。
然后,我们采用同一张表,定义总宽度为 50(这比页面上原始可用宽度的 80% 小得多)。现在,当我们计算具有相同内容的表格的高度时,iText 返回 192 而不是 48。当您查看页面上的表格时,高度差异的原因很明显。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)