2013-03-15 117 views
0

我正在使用iText 5.2.1版。 要充分認識Chunk對象的setSkew方法,我就開始發揮它用下面的代碼:爲什麼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 2nd ed。」書中,setSkew的第一個參數是文本基線的傾斜度,第二個參數是字符和(原始)基線之間的角度。

那麼,我錯過了什麼?

回答

2

你基本上缺少的是,你期望與你的參數歪斜只是像一個簡單的旋轉,這將保持大小,因爲它們是。這是不是歪斜的情況。取而代之的傾斜是這樣的:

sketch explaining skewing

(無恥地複製出來的 - 在PDF specification ISO 32000-1:2008「圖13影響座標變換」)

剩下的同樣是投影的長度到文本行的常規基線上:

sketch with baseline projections x0 and x1

這裏x0和x1具有相同的長度,但偏斜的基線更長。角度越陡峭,偏斜的基線越長,以及那裏的字形寬度越長。

模擬用於y軸。因此,您的樣品的結果是這樣的:

enter image description here

如果你喜歡數學推理,認爲傾斜變換矩陣的值有[1棕褐色(一)棕褐色(B)1 0 0。所以(1,0)偏斜到(1,tan(a)),(0,1)到(tan(b),1),並且所有其他部分根據線性對應。