我正在使用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 in action 2nd ed”。在书中,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),其他所有东西都根据线性度对应。