You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "John Hewson (JIRA)" <ji...@apache.org> on 2014/10/11 03:30:33 UTC
[jira] [Closed] (PDFBOX-1015) Draw Rotated Box
[ https://issues.apache.org/jira/browse/PDFBOX-1015?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
John Hewson closed PDFBOX-1015.
-------------------------------
Resolution: Invalid
To rotate graphics in PDF you simply set the current transformation matrix - no need to do any math yourself.
> Draw Rotated Box
> ----------------
>
> Key: PDFBOX-1015
> URL: https://issues.apache.org/jira/browse/PDFBOX-1015
> Project: PDFBox
> Issue Type: Improvement
> Components: Writing
> Affects Versions: 1.5.0
> Reporter: Jason E. McCollough
> Priority: Minor
>
> While developing an app using PDFBox, I had a need to draw a rotated box. I did not see a function in the PDPageContentStream, so I built my own. The code is below. Perhaps it could be included as a method in the PDPageContentStream class in a future release? If such a method already exists somewhere, I apologize for creating white noise with this post.
> /**
> * Method to draw a box, rotated counterclockwise about the start point.
> * @param cs ContentStream to which the box should be added.
> * @param rotation Rotation, in degrees.
> * @param startX Bottom-left (pre-rotation) x-coordinate
> * @param startY Bottom-left (pre-rotation) y-coordinate
> * @param width Box width
> * @param height Box height
> * @param lineWidth Line Width
> */
> private void drawRotatedBox(
> PDPageContentStream cs,
> float rotation,
> float startX,
> float startY,
> float width,
> float height,
> float lineWidth) {
> logger.trace("Entered Method: {drawRotatedBox}");
>
> try {
> double rads = Math.toRadians(rotation);
> cs.setLineWidth(lineWidth);
> float[][] coords = new float[4][2];
> //bottom-left
> coords[0][0] = startX;
> coords[0][1] = startY;
> //bottom-right
> coords[1][0] = coords[0][0]+(float)(Math.cos(rads)*width);
> coords[1][1] = coords[0][1]+(float)(Math.sin(rads)*width);
> //top-right
> coords[2][0] = coords[1][0]-(float)(Math.sin(rads)*height);
> coords[2][1] = coords[1][1]+(float)(Math.cos(rads)*height);
> //top-left
> coords[3][0] = coords[2][0]-(float)(Math.cos(rads)*width);
> coords[3][1] = coords[2][1]-(float)(Math.sin(rads)*width);
>
> //draw the box
> cs.moveTo(coords[0][0], coords[0][1]);
> cs.lineTo(coords[1][0], coords[1][1]);
> cs.lineTo(coords[2][0], coords[2][1]);
> cs.lineTo(coords[3][0], coords[3][1]);
> //close the box. shift +/- 1/2 the line width to ensure complete closure
> cs.lineTo(coords[0][0]+(lineWidth/2), coords[0][1]-(lineWidth/2));
>
> // Display coordinate map during debugging
> // for (int i=0; i<4; i++){
> // int j=0;
> // logger.trace("x: " + coords[i][j] + "; y: " + coords[i][j+1]);
> // }
>
> coords=null; //gc
> cs.stroke();
> } catch (IOException ioe) {
> logger.error("Problem occurred while drawing the rotated box.");
> }
> logger.trace("Method Complete: {drawRotatedBox}");
> }
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)