使用PyMuPDF删除PDF注释时报mupdf: invalid key in dict错误如何解决

错误原因
doc.save()方法被放置在页面遍历循环内部,每处理完1页就执行一次保存操作,会直接修改文档对象的底层结构,后续遍历其余页面时就会触发mupdf底层的invalid key in dict异常。- 直接遍历
page.annots()迭代器的同时执行删除操作,会导致迭代器失效,部分结构不规范的PDF也会触发同类报错。
修复后代码
import fitz import re doc = fitz.open("test.pdf") # 遍历所有页面,提前转成列表避免遍历过程中文档结构变化引发异常 for page in list(doc): # 提前将当前页所有注释转成列表,避免删除操作导致迭代器失效 for annot in list(page.annots()): try: page.delete_annot(annot) except RuntimeError: # 跳过结构异常的注释,避免中断整体执行 continue # 全部页面处理完成后统一执行保存 doc.save('test1.pdf') doc.close()
补充说明
如果源PDF本身存在结构损坏,可在打开文件时开启自动修复参数:doc = fitz.open("test.pdf", repair=True)
内容的提问来源于stack exchange,提问作者Sundaram
相关产品推荐
相关产品推荐

