You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pypdf处理PDF遇加密算法不支持报错 如何跳过受密码保护文件

PDF批量处理报错解决方案

加密限制说明

当前你遇到的NotImplementedError是PyPDF2库的固有功能限制:该库仅支持版本为1、2的旧版PDF加密算法,现在多数新型加密PDF(如采用AES-256加密的V4/V5版本PDF)无法使用空密码解密。在无正确密码的前提下,没有合规、稳定的加密绕过方案,破解加密PDF不符合版权相关规定,不建议尝试。

代码修改方案(异常捕获返回指定标识)

你可以通过增加异常捕获逻辑,实现解密失败时返回"encrypted"、不中断批量处理的效果,修改后的完整代码如下:

import requests
from io import BytesIO
from PyPDF2 import PdfFileReader

def getResponse(url):
    try:
        response = requests.get(url, timeout=10) # 增加超时避免长时间卡住
        # 校验响应状态码和内容类型,避免非PDF内容进入后续处理
        if response.status_code == 200 and 'application/pdf' in response.headers.get('Content-Type', ''):
            return response
        return None
    except:
        return None

def getNumberOfPages(response):
    # 先判断响应是否为空
    if not response:
        return "request_failed"
    try:
        with BytesIO(response.content) as open_pdf_file:
            read_pdf = PdfFileReader(open_pdf_file)
            if read_pdf.isEncrypted:
                # 尝试空密码解密,失败直接抛出异常到外层捕获
                read_pdf.decrypt("")
            num_pages = read_pdf.getNumPages()
            return num_pages
    except NotImplementedError:
        # 匹配不支持加密算法的报错
        return "encrypted"
    except Exception as e:
        # 其他加密相关报错、PDF格式无效等情况,可根据需求调整返回值
        if "encrypt" in str(e).lower() or "decrypt" in str(e).lower():
            return "encrypted"
        return "invalid_pdf"
    
def checkPDFs(pdfLinks):
    pdfDetails = {}
    for link in pdfLinks:
        pdfDetails[link] = {}
        response = getResponse(link)
        pdfDetails[link]["numberOfPages"] = getNumberOfPages(response)
        #pdfDetails[link]["creationDate"] = getDocumentInfo(response)
    print("PDF details", pdfDetails)
    return pdfDetails

核心修改点

  • 优化了getResponse函数,增加超时判断和响应校验,避免非PDF内容、请求失败的情况进入后续处理
  • 给getNumberOfPages增加了多层异常捕获,对不支持的加密算法、解密失败的场景统一返回"encrypted"
  • 对请求失败、PDF格式无效的场景也增加了对应返回标识,方便后续统计处理

内容的提问来源于stack exchange,提问作者x89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 01:21:02