使用pypdf提取PDF注释内容时遇/Contents键错误的解决求助
解决pypdf提取PDF注释时的KeyError问题
问题根源在于你直接通过键访问/Contents字段,当注释对象不存在该字段时(比如仅含空格的注释可能未被PDF文件存储这个字段),就会触发KeyError。以下是可行的解决思路:
- 用字典的
get()方法安全获取/Contents,指定默认值(比如空字符串),避免直接访问键引发错误 - 对获取到的内容做去空格处理,统一判断是否为空或仅含空白字符
修改后的代码如下:
from pypdf import PdfReader reader = PdfReader("example.pdf") for page in reader.pages: if "/Annots" in page: for annot in page["/Annots"]: annot_obj = annot.get_object() subtype = annot_obj.get("/Subtype") if subtype == "/Text": # 用get方法安全获取Contents,无此字段时返回空字符串 contents = annot_obj.get("/Contents", "") # 去除首尾空白字符后判断是否为空 if contents.strip() == "": print("仅含空格或无内容") else: print(contents)
说明:
- 提前把
annot.get_object()存入变量annot_obj,避免重复调用,提升效率 - 用
get()方法获取/Subtype和/Contents,比直接键访问更健壮 - 用
strip()处理内容,能覆盖仅含空格、制表符、换行符等多种空白场景
内容的提问来源于stack exchange,提问作者Herve
相关产品推荐
相关产品推荐

