How to read a PDF text matrix

后端 未结 3 1388
梦如初夏
梦如初夏 2021-02-03 14:26

I am writing a program to create PDF file directly from my Program. I have used the PDF Reference manual and managed to figure out everything except for 1 thing. The Text Matrix

相关标签:
3条回答
  • 2021-02-03 14:52

    Point definition

    [x, y, 1]

    This is a one dimensional vector (array) which places the point at the coordinates x and y. 1 is not needed to specify the point location, but it is helpful for the calculation of the location of a point in a different coordination system, like from device independent pixels to device depended pixels.

    Translation calculation

    x_new = a*x + c*y + e;
    y_new = b*x + d*y + f;
    

    Written as matix, the calculation looks like this:

    Matrix for translation

    A translation moves a point.

    [1, 0, 0, 1, tx, ty]

    x_new = 1*x + 0*y + tx;
    y_new = 0*x + 1*y + ty;
    

    or

    x_new = x + tx;
    y_new = y + ty;
    

    Matrix for rotation

    [cos(theta), sin(theta), -sin(theta), cos(theta), 0, 0]

    x_new = cos(theta)*x - sin(theta)*y + 0;
    y_new = sin(theta)*x + cos(theta)*y + 0;
    

    0 degree rotation, cos(0)=1, sin(0)=0: [1, 0, -0, 1, 0, 0]

    x_new = 1*x + 0*y + 0;
    y_new = 0*x + 1*y + 0;
    

    or

    x_new = x;
    y_new = y;
    

    90 degree rotation, cos(90)=0, sin(90)=1: [0, 1, -1, 0, 0, 0]

    x_new = 0*x + -1*y + 0;
    y_new = 1*x + 0*y + 0;
    

    or

    x_new = -y;
    y_new = x;
    

    180 degree rotation, cos(180)=-1, sin(180)=0: [-1, 0, -0, -1, 0, 0]

    x_new = -1*x + 0*y + 0;
    y_new = 0*x + -1*y + 0;
    

    or

    x_new = -x;
    y_new = -y;
    

    270 degree rotation, cos(270)=0, sin(270)=-1: [0, -1, 1, 0, 0, 0]

    x_new = 0*x + 1*y + 0;
    y_new = -1*x + 0*y + 0;
    

    or

    x_new = y;
    y_new = -x;
    

    Example text matrix

    [0 1 -1 0 07 07]

    0 1 -1 0: Rotation by 90 degrees 07 07: Translation (offset) by 7 in each x and y direction

    0 讨论(0)
  • 2021-02-03 14:55

    Also interesting for you could be Chapter 4.2.2 Common Transformations in PDF developer reference https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf

    0 讨论(0)
  • 2021-02-03 15:01

    The matrices used in PDFs are Affine transforms.

    tm loads the parameters into:

    |a b 0|
    |c d 0|
    |e f 1|

    Where:

    a is Scale_x
    b is Shear_x
    c is Shear_y
    d is Scale_y
    e is offset x
    f is offset y
    

    A good introduction can be found at http://docstore.mik.ua/orelly/java-ent/jfc/ch04_11.htm

    Hope this helps someone.

    0 讨论(0)
提交回复
热议问题