rotation is around the lower left axis. That is why I wrote a few days ago: "90° rotated in clock direction would be you'd have to adjust the Y value, i.e. add the width to it."

Additionally, the parameter of rotate() is in radians, not in degrees. Use Math.toRadians().

Tilman

Am 07.03.2016 um 16:17 schrieb Stahle, Patrick:
Hi,

With the following code:
        Matrix matrix = new Matrix();
        matrix.rotate(45);
        canvas.saveGraphicsState();
        canvas.transform(matrix);
        canvas.drawImage(ximage, rect.getLowerLeftX(), rect.getLowerLeftY(), 
rect.getWidth(), rect.getHeight());
        System.out.println("rect=" + rect + ", page mediabox=" + 
page.getMediaBox());
        canvas.restoreGraphicsState();

System out:
rect=[485.01,52.8,581.4,89.214], page mediabox=[0.0,0.0,612.0,792.0]

I would expect my image to show up in the lower right hand corner, but I am 
seeing about mid way down on the left hand side. Is the x, y position not 
starting form the bottom left?

Thanks,
Patrick

-----Original Message-----
From: Stahle, Patrick [mailto:[email protected]]
Sent: Monday, March 07, 2016 9:57 AM
To: [email protected]
Subject: RE: drawing images with rotation PDFBox 2.0

Ok, I am lot closer. This seems to work. The only thing right now is I don't 
think the position is correct, but I have to look at that a bit more...
Seems like I have to first rotate & transform and then use the drawImage and pass a 
width & height to scale it.

        Matrix matrix = new Matrix();
        matrix.rotate(45);
        canvas.saveGraphicsState();
        canvas.transform(matrix);
        canvas.drawImage(ximage, rect.getLowerLeftX(), rect.getLowerLeftY(), 
rect.getWidth(), rect.getHeight());
        canvas.restoreGraphicsState();

-----Original Message-----
From: Stahle, Patrick [mailto:[email protected]]
Sent: Monday, March 07, 2016 8:05 AM
To: [email protected]
Subject: RE: drawing images with rotation PDFBox 2.0

I don't know how to do the rotation without AffineTransform, do you have a 
suggestion for at.rotate method call?

-----Original Message-----
From: Tilman Hausherr [mailto:[email protected]]
Sent: Friday, March 04, 2016 3:51 PM
To: [email protected]
Subject: Re: drawing images with rotation PDFBox 2.0

Am 04.03.2016 um 21:27 schrieb Stahle, Patrick:
  From the code below both images draw, but as soon as I uncomment out " 
canvas.transform(new Matrix(at));" the first image does not draw or draws where I 
can't see it. I must still be missing something?

        AffineTransform at = new AffineTransform(rect.getWidth(), 0, 0,
rect.getHeight(), 0, 0);
Don't use the line above! Just create a pure rotation matrix.

        PDPageContentStream canvas = new PDPageContentStream(document, page, 
PDPageContentStream.AppendMode.APPEND, true, true);
        at.rotate(Math.toRadians(0));
        canvas.saveGraphicsState();
        //canvas.transform(new Matrix(at));
        canvas.drawImage(ximage, 100 /*rect.getLowerLeftX()*/, 100 
/*rect.getLowerLeftY()*/);
        canvas.restoreGraphicsState();

        canvas.saveGraphicsState();
        AffineTransform at2 = new AffineTransform(rect.getWidth(), 0, 0,
rect.getHeight(), rect.getLowerLeftX(), rect.getLowerLeftY());
That line above too, don't use  it.

Tilman


        at.rotate(Math.toRadians(0));
        canvas.drawXObject(ximage, at2);
        canvas.restoreGraphicsState();
        canvas.close();

-----Original Message-----
From: Tilman Hausherr [mailto:[email protected]]
Sent: Friday, March 04, 2016 3:08 PM
To: [email protected]
Subject: Re: drawing images with rotation PDFBox 2.0

Am 04.03.2016 um 21:04 schrieb Stahle, Patrick:
I tried the following but the image now no longer draws...
        AffineTransform at = new AffineTransform(rect.getWidth(), 0, 0, 
rect.getHeight(), rect.getLowerLeftX(), rect.getLowerLeftY());
        PDPageContentStream canvas = new PDPageContentStream(document, page, 
PDPageContentStream.AppendMode.APPEND, true, true);
        at.rotate(Math.toRadians(90));
        canvas.saveGraphicsState();
        canvas.transform(new Matrix(at));
        canvas.drawImage(ximage, rect.getLowerLeftX(), rect.getLowerLeftY());
        canvas.restoreGraphicsState();
        canvas.close();
No, what I meant is make a transform that has only the rotation. Then
draw the image at the position you're planning (however you may have
to adjust this, as the rotation is done around the (0,0) axis)

The best would be to set a position like (300,300) which is about in the middle 
and see what happens.

90° rotated in clock direction would be you'd have to adjust the Y value, i.e. 
add the width to it.

TIlman

Did I misunderstand something?

As for the imaging squishing I am seeing. It looks to me like the rectangle 
size / position of the image non rotated stays exactly the same but the 
contents are rotated and squished. I can send you a couple pdfs showing what I 
mean (direct email?). And maybe that is how it is supposed to work, but I would 
of expected the image to look exactly the same just rotated. In case of 90 
degrees, like the example above, I would of expect simply the width to become 
the height and the height to become the width.

-----Original Message-----
From: Tilman Hausherr [mailto:[email protected]]
Sent: Friday, March 04, 2016 2:44 PM
To: [email protected]
Subject: Re: drawing images with rotation PDFBox 2.0

Am 04.03.2016 um 20:35 schrieb Stahle, Patrick:
Hi,

I am struggling with rotating an image. For instance I have the following code:
AffineTransform at = new AffineTransform(rect.getWidth(), 0, 0,
rect.getHeight(), rect.getLowerLeftX(), rect.getLowerLeftY()); 
PDPageContentStream canvas = new PDPageContentStream(document, page, 
PDPageContentStream.AppendMode.APPEND, true, true);
                    at.rotate(Math.toRadians(90));
                    canvas.drawXObject(ximage, at);
                    canvas.close();

It seems to work, but not the way I would've expected it to. It rotates the 
image but keeps the original boxed rectangle size which in this case squishing 
the image. Is this expected behavior, and if so is there way for an image to 
rotate and keep the sizing? I kind of hoped it work the same way as rotating 
text...
Sorry I don't understand you... why should it not keep the size?

Also on a PDFBox 2.0 note, the "PDPageContentStream  -> drawXObject' is 
deprecated and the source says to use drawImage instead. However I was not able to find 
a drawImage method that takes AffineTransform. What is the recommended way to do this 
in 2.0 going forward?
            saveGraphicsState();
            transform(new Matrix(transform));  <== do the rotation
only

             drawImage()     <=== here just set the position

            restoreGraphicsState();



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to