【问题标题】:How can I get the page orientation of a PDF page?如何获取 PDF 页面的页面方向?
【发布时间】:2010-10-14 08:07:58
【问题描述】:

函数 getPageDimensions(CAM::PDF)为纵向和横向页面返回相同的值。 如何识别 PDF 页面的方向? 我正在使用 CAM::PDF Perl 库,并且想知道如何使用这个库来做到这一点。 但也欢迎任何其他方法来识别这一点(最好使用 Perl 库)。

谢谢。

【问题讨论】:

    标签: perl pdf


    【解决方案1】:

    我是 CAM::PDF 的作者。

    嗯,这有两个部分。如您所述,一个是页面的尺寸。这按预期工作:我使用 Apple 的 Preview.app 来旋转 PDF 文件并运行这两个命令行:

    perl -MCAM::PDF -le'print "@{[CAM::PDF->new(shift)->getPageDimensions(1)]}"' orig.pdf 
    0 0 612 792
    perl -MCAM::PDF -le'print "@{[CAM::PDF->new(shift)->getPageDimensions(1)]}"' rotated.pdf 
    0 0 792 612
    

    但还有 `/Rotate' 页面属性。参数是度数(默认为 0,但 90 或 270 并不少见)。与页面尺寸一样,它是一个可继承的属性,因此您必须导航到父页面。这是一个输出旋转值的快捷命令行工具:

    use CAM::PDF;
    my $filename = shift || die;
    my $pagenum = shift || die;
    my $pdf = CAM::PDF->new($filename) || die;
    my $pagedict = $pdf->getPage($pagenum);
    my $rotate = 0;
    while ($pagedict) {
       $rotate = $pdf->getValue($pagedict->{Rotate});
       if (defined $rotate) {
          last;
       }
       my $parent = $pagedict->{Parent};
       $pagedict = $parent && $pdf->getValue($parent);
    }
    print "/Rotate $rotate\n";
    

    【讨论】:

    • 谢谢克里斯。我认为 $pagedict->{Rotate}->{value} 部分。但不是父部分。再次感谢。
    • 小修正。 while 中的 "my $rotate" 应该是 $rotate。
    • 谢谢。我的测试 PDF 有一个明确的“/Rotate 0”(不知道为什么......)所以我没有注意到这个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多