如何解决PyPDF2解密PDF时io.UnsupportedOperation: can't do nonzero end-relative seeks报错
错误原因
你遇到的io.UnsupportedOperation: can't do nonzero end-relative seeks(中文含义:输入输出不支持操作:无法执行非零值的相对文件末尾寻址操作)报错,核心问题是参数位置写反:你将本该传入open()函数的二进制读取模式参数'rb',错误传给了PyPDF2.PdfFileReader的构造函数,导致PDF文件实际是以默认的文本模式'r'打开的。文本模式不支持随机跳转读取(seek操作),而PyPDF2解析PDF结构必须调用seek操作,因此触发报错。
修正后的代码
import PyPDF2 # 把'rb'作为open()的第二个参数,指定以二进制只读模式打开文件 with open('C:\\Path\\to\\the\\file\\encrypted.pdf', 'rb') as pdf_file: pdf_reader = PyPDF2.PdfFileReader(pdf_file) # 执行解密 pdf_reader.decrypt('rosebud') # 后续可以正常操作PDF,比如读取第一页内容 # first_page = pdf_reader.getPage(0) # print(first_page.extractText())
补充注意事项
- 推荐使用
with语句管理文件句柄,代码块执行结束后会自动关闭文件,避免资源泄漏 - 如果修正参数后仍解密失败,可先升级PyPDF2到最新版本以支持更多加密算法:
pip install --upgrade PyPDF2 - 确认输入的密码和PDF加密时设置的密码完全一致,注意区分大小写、排查首尾多余空格
内容的提问来源于stack exchange,提问作者Mats Janssens
相关产品推荐
相关产品推荐

