tejas Reddy p
tejas Reddy p

Reputation: 57

Rotating each page in the PDF using java

Hi folks i have a few use cases i need to cover while rotating the page in the PDF .

  1. I need to check each page rotation value and rotate it to 0 degree.

  2. when i check few docs in Adobe it shows me 90 degree but it will be in 0 degree.

I need to cover both the use cases, I have written a code using java PDFBox which will get the degree of rotation is showing wrong, If any one have idea How to find And what are the Aspects that decide the degree please help me through it . with code or Wiki to refer , I am working on a spring boot project.

 PDDocument document;


 public void getPdfFile(String pdfPath) throws IOException {

    File file = new File(pdfPath);

    document = PDDocument.load(file);

   int pageCount = document.getNumberOfPages();

   for(int i = 0; i < pageCount; i++) {
       PDPage page =  document.getPage(i);

      System.out.println( page.getRotation());
      if(page.getRotation() != 0) {
          page.setRotation(0);
      }

   }
     document.save("/Users/tejasreddy/Desktop/CE/StorePDF/rotated1_rotated.pdf");

     document.close();
}

enter image description here

CropBox And Media Box Details

Thanks Tejas.

3: PDF Details

Upvotes: 1

Views: 815

Answers (2)

RJAGuest
RJAGuest

Reputation: 1

I had a similar problem. I use vba in Excel, MicroSoft 365. I wanted to put in an annotation, but if the page was rotated, the comment would be rotated and in a different place. So I pull in the page rotation. (Pg_rot = page.GetRotate) And add it to the annotation's properties(props.rotate = Pg_rot), as well as changing the coordinates (recter)

If objAVDoc.Open(pth, "") Then Set pdDoc = objAVDoc.GetPDDoc

Set jso = pdDoc.GetJSObject

If Not jso Is Nothing Then

    Set page = pdDoc.AcquirePage(0)
    
    Pg_rot = page.GetRotate()
    
    ' This has been tested for 0 and 270 degrees
    Select Case Pg_rot
        Case Is = 0
            recter(0) = 410  
            recter(1) = 780 
            recter(2) = 600 
            recter(3) = 730 
        Case Is = 270
           recter(0) = 780  
           recter(1) = 410 
           recter(2) = 730  
           recter(3) = 60          
    End Select
    Set annot = jso.AddAnnot
    
    Set props = annot.getprops
        props.page = 0
        props.rotate = Pg_rot
        props.Type = "FreeText"
        props.rect = recter
        props.author = author
        props.contents = note
        
    annot.setProps props
    
    If pdDoc.Save(PDSaveFull, pth) = False Then
        MsgBox "FAIL   -  " & pth
        pdDoc.Close
    Else
        MsgBox "success"
        pdDoc.Close
End If

I can't seem to the rest to the code snippet above. (End if, set app to nothing etc.)

Upvotes: 0

mkl
mkl

Reputation: 95898

There appears to be a misunderstanding in respect to the meaning of the PDF page rotation property, so I'll explain that here.

The visible page area has the dimensions and coordinate ranges given by the CropBox entry of the page. The x coordinates in this area increase going right, the y coordinate increase going up. In this area the instructions of the page content streams can draw text and other contents in any direction or orientation.

The Rotate entry of the page (i.e. the "page rotation") instructs a viewer program to display the page area defined by the crop box rotated clockwise by the value of that entry in degree (must be a multiple of 90°).

That's it.

Thus, the page rotation value does not necessarily coincide with the orientation of any content on the page. (Of, course, when creating a PDF one usually chooses the crop box and the rotation value to make both adding content and reading it in a viewer as easy as possible. But this is not technically enforced.)

Upvotes: 1

Related Questions