Q: Thanks alot for your reply regarding GetDefaultMatrix(). It was

very helpful, as always. I am still having a time trying to get my

head around transformations. Background on us, we are parsing PDF docs

and converting them to another format, which also uses matrix

transformations.

We need to flip the y-axis, so from your response below and the

documentation I have read, I should be able to get the page default

matrix (with flip_y=true) and multiply a transformation matrix by that

to get my result. In other words, the following pseudo-code should

work:

Matrix2D mtx = element.GetCTM();

Matrix2D flipit = pdfPage.GetDefaultMatrix(true); Matrix2D result =

mtx * flipit; //Need to implement matrix multiplication here. ie

result[x, y] = mtx row(x) * flipit column(y)

Other.Format.Matrix final = new Other.Format.Matrix(result);

Am I understanding this part correctly?

----

A: Actually the order of multiplication is the other way around: from

right to left. This convention follows the PostScript/PDF convention.

Matrix2D result = pdfPage.GetDefaultMatrix(true) * element.GetCTM() ;

or perhaps

Matrix2D device_mtx = ...

Matrix2D result = device_mtx * pdfPage.GetDefaultMatrix(true) *

element.GetCTM() ;

In this case the element will be first transformed using the CTM (the

Current Transformation Matrix), followed by default page matrix (which

will also invert the content on the page as well as take into account

page rotation/offset). The element will be then transformed using

device_mtx into your custom coordinate system (e.g. screen or target

format coord system).