2

好的,这里有一些代码(pdfDocument是 a com.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),3f 点在 96dpi 的屏幕上应该正好是 4 个像素(我的是)。然而,当我用上面的代码创建一个表格时,我得到了单元格的交替高度 4 - 3 - 4 - 3 - 4 - 3 等等......

为什么会这样?我会理解我输入的值是缩放到 x.6 像素的值,因此每隔一段时间就会出现一个比其他像素高一个像素的单元格。


例如。:

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

如果我将值增加到 4f,所有单元格的高度将是 5 个像素,但每隔三个边框就会变厚一个像素。


此外,如果我确实使用 x.6 作为值,该值是否会四舍五入 (5.99 -> 6) 或取整 (5.99 -> 5) 为整数?

由于 iText 仅适用于点,我猜这是一个内部 PDF 的东西,。但我还是想知道。

我现在需要准确地确定一个单元格的浮点值有多高,这样我就可以准确地预测整个表格或对象的高度,然后我可以将其计算到整个页面的组成中。如果我不可靠地知道,我是不可能做到的。

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

4

1 回答 1

3

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

3f 高度为 100% 的网格

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

3f 高度为 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 查看器、显示设备或涉及的任何其他组件(例如图形驱动程序、操作系统显示抽象......)的限制。

于 2013-08-06T12:25:16.347 回答