0

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

那么,我错过了什么?

4

1 回答 1

2

您基本上缺少的是,您希望参数的倾斜只是像简单的旋转一样,可以保持大小不变​​。这不是倾斜的情况。相反,倾斜的工作方式如下:

解释倾斜的草图

(无耻地抄袭PDF 规范 ISO 32000-1:2008中的“图 13 – 坐标变换的影响” )

保持不变的是倾斜基线在文本行的常规基线上的投影长度:

带有基线投影 x0 和 x1 的草图

这里 x0 和 x1 的长度相同,但倾斜的基线更长。角度越陡,倾斜的基线和那里的字形宽度就越长。

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

在此处输入图像描述

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

于 2013-03-17T13:19:37.533 回答