使用Python3读取PDF转文本报错:'PDFObjRef'对象无'decode'属性
解决pdfminer.six中AttributeError: 'PDFObjRef' object has no attribute 'decode'的问题
我之前也碰到过一模一样的错误!这个问题大多出在pdfminer.six的版本兼容上,或是底层API处理特殊PDF对象时的bug。给你几个实用的解决办法:
优先升级pdfminer.six到最新版本
这个错误在旧版本的pdfminer.six里很常见,官方已经修复了相关的对象引用解析问题。打开终端运行:pip install --upgrade pdfminer.six升级后再跑你原来的代码,大概率就能解决问题。
改用更简洁的高层API(推荐)
pdfminer.six其实已经封装了更易用的extract_text函数,不用手动管理资源管理器、解释器这些底层组件,代码更简洁也不容易踩坑。修改后的代码如下:from pdfminer.high_level import extract_text def pdfparser(data): # 直接调用extract_text读取PDF文件内容 text_content = extract_text(data) print(text_content) # 替换成你的目标PDF文件路径 pdfparser("your_target.pdf")坚持用底层API的调整方案
如果你一定要保留原代码结构,可以尝试在PDFPage.get_pages中添加参数确保只处理可提取内容,同时检查PDF文件是否存在加密或损坏情况:
修改循环部分的代码:for page in PDFPage.get_pages(fp, check_extractable=True): interpreter.process_page(page)另外也可以尝试调整
LAParams参数(比如设置detect_vertical=True),不过这个效果因人而异,还是升级版本或用高层API更靠谱。
错误原因说明
这个AttributeError本质是旧版本pdfminer.six在解析PDF中的对象引用(PDFObjRef)时,没有正确将其转换为可处理的字符串类型,导致后续代码试图调用decode方法失败,新版本已经修复了这个解析逻辑的bug。
内容的提问来源于stack exchange,提问作者Jignesh




