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

如何用Python提取PDF的实际文件页码而非文档标注页码

解决PDF实际显示页码与PyPDF2提取索引不一致的问题

问题背景

使用PyPDF2提取指定文本所在页码时,返回的是PDF文档的内部页面索引(从0开始计数),但实际需要的是PDF文件显示的页码(比如代码输出7、22,但实际显示为8、23)。

解决方案

方案1:直接索引偏移(适用于页码连续从1开始的情况)

大多数PDF的实际显示页码是内部索引+1,只需将代码中输出的索引值加1即可:

import PyPDF2
import re

# 新版本PyPDF2推荐使用PdfReader替代旧版PdfFileReader
reader = PyPDF2.PdfReader(r"avnet_202209 (1).pdf")

target_text = "Basis of presentation and new accounting pronouncements"

# 遍历所有页面,enumerate返回索引和页面对象
for page_index, page in enumerate(reader.pages):
    page_text = page.extract_text()
    if re.search(target_text, page_text):
        # 索引+1得到实际显示页码
        print(f"String Found on Page: {page_index + 1}")

方案2:解析PDF页码标签(适用于存在页码偏移的复杂情况)

如果PDF包含无页码的封面、目录等页面,实际页码并非从内部索引0开始计数,需要读取PDF的/PageLabels字典来获取准确的显示页码:

import PyPDF2
import re

reader = PyPDF2.PdfReader(r"avnet_202209 (1).pdf")
target_text = "Basis of presentation and new accounting pronouncements"

# 获取所有页面的标签映射信息
page_label_info = reader.page_labels

for page_index, page in enumerate(reader.pages):
    page_text = page.extract_text()
    if re.search(target_text, page_text):
        # 从标签信息中提取实际显示页码
        actual_page = page_label_info[page_index]["number"]
        print(f"String Found on Page: {actual_page}")

注意:如果PDF未定义页码标签(/PageLabels),page_labels会默认返回索引+1的数值,和方案1效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:45:23