2016-09-20 9 views
2

PDPageContentStream.setTextMatrix(Matrix m)の引数の行列mにある6つの値が何であるか分かりません。以前は6つの値を取っていましたが、今はすべての値を含む1つの行列が必要になります。PDPageContentStream.setTextMatrix()の引数を理解する

はい、私はドキュメントを読んでいると私は説明が完全に役に立たない見つけ -

public void setTextMatrix(double a, 
      double b, 
      double c, 
      double d, 
      double e, 
      double f) 
       throws IOException 

The Tm operator. Sets the text matrix to the given values. A current text matrix will be replaced with the new one. 

Parameters: 
a - The a value of the matrix. 
b - The b value of the matrix. 
c - The c value of the matrix. 
d - The d value of the matrix. 
e - The e value of the matrix. 
f - The f value of the matrix. 

私も例で検索しましたが、どこにも私は、これらの値の説明を見つけるんでした。また、奇妙なことに、私は2つの異なるPDFファイルで同じ値を試したときに結果が異なっていたので、これは余白や距離などと関係があると仮定しています。

私は推測を行う際に時間を無駄にしているように感じます作業。議論の直接の説明は本当に良いでしょう。

EDIT

私は行列について、どのように値を渡すために知っています。行列の値が実際にどういう意味か分かりません。

+0

made editを参照してください。 – user8

+0

javaドキュメントのAffineTransformの説明を読んでください。これはパラメータが異なることを除いて同じです。Matrixの静的メソッドを参照してください。* –

+0

座標系を扱うpdf仕様の部分も参照してください。 – mkl

答えて

2

あなたはdouble精度の一部を失うの小さなリスクでMatrix constructors

setTextMatrix(new Matrix(Double.valueOf(a).floatValue(), 
          Double.valueOf(b).floatValue(), 
          Double.valueOf(c).floatValue(), 
          Double.valueOf(d).floatValue(), 
          Double.valueOf(e).floatValue(), 
          Double.valueOf(f).floatValue())) 

のいずれかを使用して、新しいメソッドの要件をバイパスしてみてください。

EDIT:
あなたはこの例でチェックアウトすることができ - UsingTextMatrixを。

パーPDPageContentStream.javaこれはあなたが尋ねているため、非推奨setTextMethod、次のとおりです。基本的に私は上記の試した何を

@Deprecated 
public void setTextMatrix(double a, double b, double c, double d, double e, double f) throws IOException 
{ 
    setTextMatrix(new Matrix((float)a, (float)b, (float)c, (float)d, (float)e, (float)f)); 
} 

を。したがって、よりコンパクトな使い方の外に、大きな違いはありません。詳細については、org.apache.pdfbox.pdmodel.PDPageContentStreamクラスを参照してください。

static final float[] DEFAULT_SINGLE = 
{ 
     a,b,0, 
     c,d,0, 
     e,f,1 
}; 

ここ

a stands for ScaleX 
b stands for ShearY 
c stands for ShearX 
d stands for ScaleY 
e stands for TranslateX 
f stands for TranslateY 

このWiki about Affine Transformationsにあなたが読むことができる:

a, b, c, d, e, fは、フォームの単一org.apache.pdfbox.cos.COSArrayを定義:単一のfloat/double値の意味について

あなたがこれらの価値観でできること。以下に視覚可能な操作を表される。 enter image description here

org.apache.pdfbox.util.MatrixtXtYの位置と上記画像に若干の違いがあります。

これが問題を解決します。

+1

私の質問への編集を参照してください。 –

+0

あなたはちょうど私にデータ型について教えているだけで、値が何であるか、b値は何かなどを教えていません。これらはx/y座標か翻訳などですか? –

+0

@Yugankaあなたは線形代数を知っていますか?特に、平行移動、回転などを数学的にアフィン変換として表現する方法と、3次元空間に2次元平面を埋め込むことによって、3x3行列のサブセットを使用して平面のアフィン変換をモデル化する方法?コンピュータグラフィックスでは、通常、いくつかの基本的な数学を知っていることが期待されます。 – mkl

関連する問題