如何使用pypdf检测合并PDF文档中的加密页面?
如何用pypdf识别合并PDF中的加密页面
核心思路
合并后的混合加密PDF,单靠文档级的加密检测无法区分页面。我们可以通过逐页尝试访问页面内容/属性,利用加密页面会触发权限异常的特性,来定位具体加密页面。
实现代码
from pypdf import PdfReader def find_encrypted_pages(pdf_file_path): reader = PdfReader(pdf_file_path) encrypted_page_nums = [] for index in range(len(reader.pages)): page = reader.pages[index] try: # 尝试提取页面文本,加密页面会抛出权限相关异常 page.extract_text() # 额外验证:尝试访问页面元数据属性 _ = page.media_box except Exception as e: # 通过异常信息关键词判断是否为加密导致 err_msg = str(e).lower() if "encrypted" in err_msg or "permission" in err_msg: encrypted_page_nums.append(index + 1) # 转换为1起始的页面编号 return encrypted_page_nums # 调用示例 target_pdf = "你的混合加密PDF路径" encrypted_pages = find_encrypted_pages(target_pdf) print(f"加密页面:{encrypted_pages}")
关键说明
- 异常判断逻辑:pypdf针对加密页面会抛出
PermissionError、NotImplementedError等异常,通过匹配"encrypted"或"permission"关键词可以精准筛选加密场景。 - 扩展验证:如果部分PDF允许文本提取但禁止其他操作,可以替换验证逻辑为尝试修改页面(如调整旋转角度),触发权限异常来判断。
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

