我使用的是iText 5.2.1版。
为了完全理解setSkew
对象的Chunk
方法,我开始使用以下代码来使用它:
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”。如图所示,setSkew的第一个参数是文本基线的倾斜度,第二个参数是字符与(原始)基线之间的角度。
那么,我缺少什么?
答案 0 :(得分:2)
你基本上缺少的是你希望你的参数偏差只是一个简单的旋转,它可以保持尺寸不变。这是不倾斜的情况。相反,倾斜的工作方式如下:
(无耻地复制出&#34;图13 - 坐标转换的效果&#34;在PDF specification ISO 32000-1:2008中)
歪斜基线的投影的长度与文本行的常规基线之间的长度相同:
这里x0和x1具有相同的长度,但是偏斜的基线更长。角度越陡,歪斜的基线越长,那里的字形宽度也越长。
模拟用于y轴。因此,您的样本会产生如下结果:
如果您更喜欢数学推理,请考虑偏斜变换矩阵的值为[1 tan(a)tan(b)1 0 0]。所以(1,0)倾向于(1,tan(a)),(0,1)到(tan(b),1),其他一切都符合线性度。