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)