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

如何用Python获取PDF大纲指向页面对象的位置?

获取PDF大纲跳转位置并裁剪页面

你已经通过PyMuPDF拿到了大纲对应的/FitH动作参数,下面直接说明如何将其转换为可用坐标并实现裁剪:

核心概念

/FitH <y>是PDF的视图指令,含义是让页面垂直滚动到y坐标位置,使该位置对齐窗口顶部。这里的y值遵循PDF原生坐标系规则:原点在页面左下角,y轴向上递增。

改进后的代码

import fitz

file = 'assets/xxx.pdf'
pdf = fitz.open(file)
outlines = pdf.get_toc(simple=False)

# 选中目标大纲条目
target_outline = outlines[13]
xref = target_outline[3]['xref']

# 获取动作对象的xref
action_xref = int(pdf.xref_get_key(xref, 'A')[1].split()[0])
# 用内置工具解析动作字典(比手动拆分更可靠)
action = fitz.utils.extract_named_action(pdf.xref_object(action_xref))

# 提取目标页面和y坐标
page_xref = action['D'][0]
target_y = action['D'][2]
page_num = pdf.xref_get_page_number(page_xref)
page = pdf[page_num]

# 输出关键信息
print(f"跳转目标页面:{page_num + 1}")
print(f"目标位置y坐标(PDF坐标系):{target_y}")
print(f"页面总高度:{page.rect.height}")

# 执行裁剪:保留目标位置到页面底部的内容
crop_rect = fitz.Rect(0, target_y, page.rect.width, page.rect.height)
page.set_cropbox(crop_rect)

# 保存裁剪后的PDF
pdf.save('assets/cropped_xxx.pdf')
pdf.close()

关键说明

  1. 坐标直接复用:/FitH后面的数值就是跳转位置的顶部y坐标,可直接用于定位。
  2. 裁剪逻辑:fitz.Rect参数为(x0, y0, x1, y1),对应页面左下角到右上角的坐标。若要裁剪目标位置以上的内容,将y0设为target_y,y1使用页面最大高度即可。
  3. 可靠解析:fitz.utils.extract_named_action能适配不同格式的PDF动作指令,比手动拆分字符串更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:29:59