You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PDF::API2获取页面尺寸(A4等)及页面方向?

使用PDF::API2获取PDF页面尺寸与方向的方法

当然可以用PDF::API2获取这些信息!其实它提供了对应的底层方法,只需要结合一点简单计算就能转换成你需要的直观结果。下面是具体的实现思路和代码示例:

获取页面原始尺寸

PDF的页面物理尺寸由MediaBox定义,PDF::API2的页面对象提供了get_mediabox()方法,返回四个坐标值:(x1, y1, x2, y2),分别对应页面左下角和右上角的坐标。通过计算x2 - x1和y2 - y1就能得到页面的宽度和高度(单位为点(pt),1点=1/72英寸)。

判断页面方向

页面方向需要结合两个关键因素:

  1. 原始宽高的大小对比
  2. 页面的旋转角度(通过get_rotate()方法获取,返回值为0、90、180、270中的一个)

如果页面旋转了90或270度,实际显示的宽高会和原始宽高交换,所以需要先根据旋转角度调整后再判断方向:

  • 调整后宽度 > 高度 → 横向(Landscape)
  • 调整后宽度 ≤ 高度 → 纵向(Portrait)

匹配标准纸张规格

你可以将计算出的原始宽高和常见标准尺寸的点值对比(允许1点以内的误差,因为部分PDF可能存在细微的尺寸调整):

  • A4:595×842点
  • US Letter:612×792点
  • A3:842×1190点

完整代码示例

use PDF::API2;

# 打开目标PDF文件
my $pdf = PDF::API2->open('your_document.pdf');

# 遍历所有页面
foreach my $page_num (1 .. $pdf->pages()) {
    my $page = $pdf->openpage($page_num);
    
    # 获取MediaBox坐标,计算原始宽高
    my ($x1, $y1, $x2, $y2) = $page->get_mediabox();
    my $raw_width = $x2 - $x1;
    my $raw_height = $y2 - $y1;
    
    # 获取页面旋转角度
    my $rotate = $page->get_rotate();
    
    # 根据旋转角度计算实际显示的宽高
    my ($display_width, $display_height);
    if ($rotate == 90 || $rotate == 270) {
        ($display_width, $display_height) = ($raw_height, $raw_width);
    } else {
        ($display_width, $display_height) = ($raw_width, $raw_height);
    }
    
    # 判断页面方向
    my $orientation = $display_width > $display_height ? '横向(Landscape)' : '纵向(Portrait)';
    
    # 匹配标准纸张尺寸
    my $paper_size;
    my $tolerance = 1; # 允许1点的误差
    if (abs($raw_width - 595) < $tolerance && abs($raw_height - 842) < $tolerance) {
        $paper_size = 'A4';
    } elsif (abs($raw_width - 612) < $tolerance && abs($raw_height - 792) < $tolerance) {
        $paper_size = 'US Letter';
    } elsif (abs($raw_width - 842) < $tolerance && abs($raw_height - 1190) < $tolerance) {
        $paper_size = 'A3';
    } else {
        $paper_size = "自定义(${raw_width}×${raw_height}点)";
    }
    
    # 输出结果
    print "页面 $page_num 信息:\n";
    print "  原始尺寸:${raw_width}×${raw_height}点\n";
    print "  旋转角度:$rotate 度\n";
    print "  显示尺寸:${display_width}×${display_height}点\n";
    print "  页面方向:$orientation\n";
    print "  纸张规格:$paper_size\n\n";
}

额外说明

  • 如果需要将点转换为毫米或英寸,可以用以下换算:
    • 1点 = 1/72 英寸 ≈ 0.352778 毫米
    • 1英寸 = 25.4 毫米 = 72 点
  • 部分PDF可能使用CropBox(裁剪框)定义实际显示区域,如果需要获取裁剪后的尺寸,可以用get_cropbox()方法替代get_mediabox()。

内容的提问来源于stack exchange,提问作者DavidA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:53:38