Hi,

I tried the following with skew being [1 tan a tan b 1 0 0] according to the 
spec. 

Matrix matrix = new Matrix();

which gives me [1.0,0.0,0.0,1.0,0.0,0.0]

then

matrix.setValue(0, 1, 0.5f);
matrix.setValue(1, 0, 0.7f);

which shall set the tan a and tan b values

which gave me 

[1.0,0.5,0.7,1.0,0.0,0.0]

then

Matrix matrix2 = new Matrix()

again being [1.0,0.0,0.0,1.0,0.0,0.0]

then

matrix.concatenate(matrix2)

resulting in [1.0,0.5,0.7,1.0,0.0,0.0]

To me that indicates that the pure matrix class is fine for that case. What are 
the arguments to the Concatenate operator in your case? Could it be that 
reading the values is not OK?

BR

Maruan

Am 27.12.2014 um 14:16 schrieb John Hewson <j...@jahewson.com>:

> Hi All,
> 
> I’ve been looking at the Matrix class and trying to understand if it has some 
> problems. The Matrix class
> in PDFBox uses the following matrix:
> 
> | sx hy 0 |
> | hx sy 0 |
> | tx ty 1 |
> 
> In a PDF file this matrix is represented as the 6-element array [a, b, c, d, 
> e, f] where the meaning of
> the values comes from p118 and is [sx, hx, hy, sy, tx, ty]. Note that h is 
> used to mean shear/skew.
> 
> The Concatenate operator class populates the Matrix as follows:
>                                            PDFBox  PDF Spec
> newMatrix.setValue(0, 0, a.floatValue());   sx      a = sx
> newMatrix.setValue(0, 1, b.floatValue());   hy      c = hx <- Flipped?
> newMatrix.setValue(1, 0, c.floatValue());   hx      b = hy <- Flipped?
> newMatrix.setValue(1, 1, d.floatValue());   sy      d = sy
> newMatrix.setValue(2, 0, e.floatValue());   tx      e = tx
> newMatrix.setValue(2, 1, f.floatValue());   ty      f = ty
> 
> I’ve annotated what PDFBox does on the left, compared to the PDF spec, the x 
> and y skew elements
> (hx and hy) are flipped in PDFBox. This flip matches the order in which AWT’s 
> AffineTransform’s
> constructor expects its elements but does not match the arrays used in the 
> PDF spec.
> 
> Are we accidentally flipping skew-x and skew-y in the Concatenate operator?
> 
> -- John
> 

Reply via email to