为什么setSkew会增加文字大小?

时间:2013-03-15 07:43:34

标签: java itext

我使用的是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的第一个参数是文本基线的倾斜度,第二个参数是字符与(原始)基线之间的角度。

那么,我缺少什么?

1 个答案:

答案 0 :(得分:2)

你基本上缺少的是你希望你的参数偏差只是一个简单的旋转,它可以保持尺寸不变。这是倾斜的情况。相反,倾斜的工作方式如下:

sketch explaining skewing

(无耻地复制出&#34;图13 - 坐标转换的效果&#34;在PDF specification ISO 32000-1:2008中)

歪斜基线的投影的长度与文本行的常规基线之间的长度相同:

sketch with baseline projections x0 and x1

这里x0和x1具有相同的长度,但是偏斜的基线更长。角度越陡,歪斜的基线越长,那里的字形宽度也越长。

模拟用于y轴。因此,您的样本会产生如下结果:

enter image description here

如果您更喜欢数学推理,请考虑偏斜变换矩阵的值为[1 tan(a)tan(b)1 0 0]。所以(1,0)倾向于(1,tan(a)),(0,1)到(tan(b),1),其他一切都符合线性度。