Python3.12.5下PyPDF2合并PDF报TypeError: unhashable type: 'ArrayObject'求助
解决PyPDF2合并PDF时的TypeError: unhashable type: 'ArrayObject'错误
这个错误是PyPDF2处理部分特殊结构PDF时的已知问题,多因旧版本库的bug或PDF包含非标准字典键导致,以下是几种可行解决方式:
方案1:升级PyPDF2到最新稳定版
运行命令更新库:
pip install --upgrade PyPDF2
新版本已修复大量PDF结构处理的bug,多数情况下能直接解决该问题。
方案2:换用PyMuPDF库处理合并
若升级后问题仍存在,推荐使用兼容性更强的PyMuPDF(fitz)替代,代码示例如下:
import fitz def merge_pdfs(pdf_list, output_pdf): merged_doc = fitz.open() for pdf_path in pdf_list: with fitz.open(pdf_path) as doc: merged_doc.insert_pdf(doc) merged_doc.save(output_pdf) merged_doc.close() if __name__ == '__main__': pdf_files = ['2019.pdf', '2020.pdf'] merge_pdfs(pdf_files, 'merged_output.pdf')
安装PyMuPDF的命令:
pip install pymupdf
方案3:临时修改PyPDF2源码(不推荐)
如果必须使用当前版本的PyPDF2,可临时修改库文件修复问题:
找到PyPDF2/generic/_data_structures.py文件,定位到DictionaryObject.read_from_stream方法的第395行,将原代码:
if not data.get(key):
替换为:
if isinstance(key, (str, bytes)) and not data.get(key):
此修改会跳过非哈希类型的键,避免触发错误,但仅作为临时 workaround,优先推荐前两种方案。
内容的提问来源于stack exchange,提问作者hooyee
相关产品推荐
相关产品推荐

