使用java旋转PDF中的每个页面

问题描述 投票:0回答:2

大家好,我在旋转 PDF 页面时需要介绍一些用例。

  1. 我需要检查每个页面的旋转值并将其旋转到0度。

  2. 当我在 Adobe 中查看一些文档时,它显示我是 90 度,但实际上是 0 度。

我需要涵盖这两个用例,我已经使用java PDFBox编写了一段代码,它将得到旋转度数显示错误的结果, 如果有人知道如何找到以及决定学位的方面是什么,请帮助我完成它。有代码或维基可供参考, 我正在开发一个 Spring Boot 项目。

 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

谢谢特哈斯。

3PDF详情

java rotation pdfbox
2个回答
1
投票

对于 PDF 页面旋转属性的含义似乎存在误解,所以我将在这里解释一下。

可见页面区域的尺寸和坐标范围由页面的 CropBox 条目给出。该区域中的 x 坐标向右增加,y 坐标向上增加。在此区域中,页面内容流的指令可以在任何方向或方向上绘制文本和其他内容。

页面的 Rotate 条目(即“页面旋转”)指示查看器程序显示由裁剪框定义的页面区域,顺时针旋转该条目的度数值(必须是 90° 的倍数) .

就是这样。

因此,页面旋转值不一定与页面上任何内容的方向一致。 (当然,在创建 PDF 时,人们通常会选择裁剪框和旋转值,以便尽可能轻松地添加内容并在查看器中阅读内容。但这在技术上并不是强制执行的。)


0
投票

我也有类似的问题。我在 Excel、MicroSoft 365 中使用 vba。 我想添加注释,但如果页面旋转,注释也会旋转并位于不同的位置。 所以我拉进页面旋转。 (pg_rot = page.GetRotate) 并将其添加到注释的属性(props.rotate = Pg_rot),以及更改坐标(reter)

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

我无法理解上面代码片段的其余部分。 (如果结束,将应用程序设置为无等)

© www.soinside.com 2019 - 2024. All rights reserved.