[ 
https://issues.apache.org/jira/browse/PDFBOX-1960?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13922076#comment-13922076
 ] 

Maruan Sahyoun commented on PDFBOX-1960:
----------------------------------------

OK - I’ve compared AffineTransform (the source) and Matrix. The reason they 
results are different is because of the way the coordinates are assigned. From 
an AffineTransform perspective a PDF matrix is already transformed so that a 
multiply of PDF matrix is a preMultiply form AffineTrans. That’s because the 
rows and columns are transformed. 

So Matrix.multiply is correct as AffineTrans.concatenate ist. Both are doing a 
pure multiply. Because the matrixes are transformed the results differ. 

Suggestion: we add a concatenate method to Matrix with the order of the 
multiply reversed, which will give the same results as AffineTransform. To 
match AffineTransform we could also add a preConcatenate method. The JavaDocs 
would then be added so we explain that these two operations are meant to match 
AffineTransform and aid to help getting the coordinates for AWT.

I haven’t worked with graphics transformations in PDF yet, but my assumption is 
that PDF matrixes are defined the way they are as like already mentioned most 
operations are premultiply operations according to the spec.

> Matrix is wrong
> ---------------
>
>                 Key: PDFBOX-1960
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-1960
>             Project: PDFBox
>          Issue Type: Bug
>    Affects Versions: 1.8.4, 2.0.0
>            Reporter: John Hewson
>            Assignee: Maruan Sahyoun
>            Priority: Critical
>
> I've been driven insane recently by trying to get pattern fills to render 
> correctly. Patterns have their own matrix which is concatenated to the CTM 
> and no matter how I applied the transformation, the results were wrong.
> It turns out that org.apache.pdfbox.util.Matrix is not behaving as expected, 
> here's an example from a pattern I'm working on. I performed the same 
> concatenation (i.e. multiplication) using our Matrix and Java's 
> AffineTransform, the results are as follows:
> Java AffineTransform:
> [[2.0, 0.0, 1.251E-12], [0.0, 2.0, 1684.0]] *
> [[0.6, 0.0, 302.6], [0.0, 0.6, 1091.38]] =
> [[1.2, 0.0, 605.2000000000013], [0.0, 1.2, 3866.76]]
> PDFBox Matrix:
> [[2.0,0.0,0.0][0.0,2.0,0.0][1.251E-12,1684.0,1.0]] *
> [[0.6,0.0,0.0][0.0,0.6,0.0][302.6,1091.38,1.0]] =
> [[1.2,0.0,0.0][0.0,1.2,0.0][302.6,2101.78,1.0]]
> I suggest that we remove Matrix and replace it with AffineTransform.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to