积分 - >像素iText(im)精度

时间:2013-08-06 11:10:39

标签: java pdf itext pixels points

好的,这是一些代码(pdfDocumentcom.itextpdf.text.Document):

PdfPTable table = new PdfPTable(1);
PdfPCell cell = new PdfPCell();
cell.setFixedHeight(3f);
for (int i = 1; i < 100; i++)
{
    table.addCell(cell);
}

pdfDocument.add(table);

根据我的计算(像素=点数/0.75f),在96dpi的屏幕上3f点应该是4个像素(我的是)。但是,当我用上面的代码创建一个表格时,我得到了单元格的交替高度4 - 3 - 4 - 3 - 4 - 3等...

为什么会这样?我会理解我放入的值是一个可以扩展到x.6像素的值,因此每隔一段时间就会出现一个比其余像素高的像素。


例如:

如果我将该值减小到2f,则大多数单元格将为2像素高,但是每10th 15th将高3像素。

如果我将值增加到4f,则所有单元格将为5像素高,但每三个边框将增加一个像素。


另外,如果我确实使用x.6作为值,那么该值是四舍五入(5.99 - > 6)还是将它们(5.99 - > 5)舍入为整数?

由于iText仅适用于积分,我猜它是内部PDF的东西。但我还是想知道。

我现在需要确定一个单元格给出浮点值的高度,这样我就可以精确地预测整个表格或对象的高度,这样我就可以将其转换为整个页面的组合。如果我不可靠,我就不可能做到。

有没有一种可靠的方法可以准确计算pdf版本的浮点值应该是x像素高?似乎我使用的公式不起作用,或者可能还有别的东西?

1 个答案:

答案 0 :(得分:3)

乍一看,表格行似乎有不同的高度:

Grid with 3f height at 100%

但如果放大,你会发现它们实际上具有相同的高度,例如在1600%:

Grid with 3f height at 1600%

因此,您在100%处看到的效果仅仅是PDF查看器的显示工件。

如果您进一步查看页面内容,您将找到:

0.5 w
88.3 803 418.4 3 re
S
0.5 w
88.3 800 418.4 3 re
S
0.5 w
88.3 797 418.4 3 re
S
0.5 w
88.3 794 418.4 3 re
S
0.5 w
88.3 791 418.4 3 re
S
.
.
.
0.5 w
88.3 515 418.4 3 re
S
0.5 w
88.3 512 418.4 3 re
S
0.5 w
88.3 509 418.4 3 re
S

即。 99个矩形,每个高度为3,垂直距离为3,线宽为0.5。此外,没有转换或用户空间单元定义,因此这些维度的单位是1/72“。

因此,本质上,PDF内容准确描述了您想要的内容,一个行表,每个行正好是3/72“高。

因此,任何显示不准确都是由于PDF查看器,显示设备或所涉及的任何其他组件(例如图形驱动程序,OS显示抽象,......)的限制。