如何修改代码实现提取20页PDF文件的全部页面页码
PDF全量页码提取失败修复方案
问题根源
代码仅返回单页页码,核心原因是仅读取了reader.pages列表中索引为0的第一个页面对象,没有遍历全部20个页面对象,页码提取逻辑未覆盖全文档。
修复操作
- 先升级依赖到稳定版,避免旧版本API兼容问题,执行命令:
pip install --upgrade PyPDF2 - 核心修改:移除固定取单页的写法(比如
page = reader.pages[0]),通过for循环遍历所有页面对象,逐页提取页码 - 把页码存储、打印的逻辑放到循环的缩进块内,不要写在循环外,避免只保留最后一次的计算结果
可直接运行的修正代码
from PyPDF2 import PdfReader # 替换为你的目标PDF文件本地路径 file_path = "your_20page_file.pdf" reader = PdfReader(file_path) total_pages = len(reader.pages) print(f"文档总页数:{total_pages}") # 遍历所有页面 for page_index, page in enumerate(reader.pages, start=1): # 获取物理页序号(从1开始计数) page_seq = page_index # 尝试读取PDF内置的自定义显示页码(比如前言罗马数字、正文起始页码不为1的场景) try: show_num = page.label if hasattr(page, 'label') else page_seq except Exception: show_num = page_seq print(f"顺序第{page_seq}页,文档显示页码:{show_num}")
异常排查
- 如果运行后总页数打印结果不是20,检查PDF文件是否损坏、路径是否正确,加密PDF需要先调用
reader.decrypt("密码")解密后再读取 - 如果使用的是PyPDF2 1.x旧版本,把
page.label替换为page["/P"].get_object()即可读取内置页码 - 不需要自定义显示页码的话,可以直接用循环的
page_index作为页码,不需要额外调用属性读取方法
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

