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」によると、この動作が理解できません。setSkew の最初のパラメーターはテキストのベースラインの傾きで、2 番目のパラメーターは文字と (元の) ベースラインとの間の角度です。

それで、私は何が欠けていますか?

4

1 に答える 1

2

基本的に欠けているのは、パラメータのスキューが、サイズをそのまま維持する単純な回転のようなものであると期待していることです。これはスキューの場合ではありません。代わりに、スキューは次のように機能します。

スキューを説明するスケッチ

( PDF仕様ISO 32000-1:2008の「図13 –座標変換の効果」から恥知らずにコピーされました)

同じままであるのは、テキスト行の通常のベースラインへの傾斜したベースラインの投影の長さです。

ベースライン投影x0およびx1を使用したスケッチ

ここで、x0とx1の長さは同じですが、歪んだベースラインの方が長くなっています。角度が急であるほど、傾斜したベースラインが長くなり、そこにあるグリフの幅も長くなります。

アナログはy軸に使用されます。したがって、サンプルの結果は次のようになります。

ここに画像の説明を入力してください

数学的推論が必要な場合は、スキュー変換行列の値が[1 tan(a)tan(b)100]であると考えてください。したがって、(1、0)は(1、tan(a))、(0、1)から(tan(b)、1)に偏り、他のすべては線形性に従って対応します。

于 2013-03-17T13:19:37.533 に答える