我使用的是 iText 版本 5.2.1。
为了完全理解 Chunk
对象的 setSkew
方法,我开始使用以下代码来使用它:
for (int i=0; i <= 90; i+=5) {
Chunk c = new Chunk("A" + i);
c.setSkew((float)i, (float)-i);
document.add(c);
}
令我惊讶的是,当接近 90 度时,文本逐渐变大。我无法理解这种行为:根据“itext in action 第二版”。 book 中,setSkew 的第一个参数是文本基线的倾斜度,第二个参数是字符与(原始)基线之间的角度。
那么,我缺少什么?
最佳答案
您本质上缺少的是您期望参数的倾斜仅仅是类似于简单旋转的东西,它将保持尺寸不变。这不是倾斜的情况。相反,倾斜的工作方式如下:
(厚颜无耻地抄袭 PDF specification ISO 32000-1:2008 中的“图 13 – 坐标变换的效果”)
保持不变的是倾斜基线到文本行常规基线的投影长度:
这里 x0 和 x1 具有相同的长度,但倾斜的基线更长。角度越陡,倾斜的基线就越长,那里的字形宽度也就越长。
模拟适用于 y 轴。因此,您的示例结果如下:
如果您更喜欢数学推理,请考虑倾斜变换矩阵的值为 [1 tan(a) tan(b) 1 0 0]。因此 (1, 0) 偏斜为 (1, tan(a)),(0, 1) 偏斜为 (tan(b), 1),其他所有内容都根据线性相应地倾斜。
关于java - 为什么 setSkew 会增加文本大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15427128/