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

PyPDF2报错:'PdfFileReader'对象无'_checkKids'属性求助

解决PyPDF2报错:'PdfFileReader' object has no attribute '_checkKids'

错误原因

你遇到的问题是PyPDF2版本不兼容:_checkKids和_buildField是旧版PyPDF2(1.x系列)的私有内部方法,在新版PyPDF2(2.x及以后)中已被移除或重构,直接调用这些私有方法自然会触发报错。

解决方案

方案1:降级到兼容的旧版PyPDF2

如果想继续沿用当前的代码结构,可以安装1.x系列的稳定版本:

pip uninstall PyPDF2
pip install PyPDF2==1.26.0

方案2:改用新版PyPDF2的官方API(推荐)

新版PyPDF2提供了更简洁的表单字段读取API,无需自己实现复杂的字段解析逻辑。修改你的get_form_fields函数如下:

from PyPDF2 import PdfReader  # 新版类名改为PdfReader,替代旧版PdfFileReader
from collections import OrderedDict

def get_form_fields(infile):
    reader = PdfReader(open(infile, 'rb'))
    fields = reader.get_fields()
    # 转换为你需要的OrderedDict格式,键为字段名,值为字段当前值
    return OrderedDict((k, v.get('/V', '')) for k, v in fields.items())

该方法直接调用官方提供的get_fields()接口,避免依赖私有内部方法,兼容性更强。

额外代码问题修正

你的createBrowserScript函数存在缩进错误:遍历items.items()的循环结束后,后续的if判断未缩进在循环内,导致只会处理最后一个字段。修正后的代码片段:

def createBrowserScript(fl, fl_ext, items, pdf_file_name):
    if pdf_file_name and len(fl) > 0:
        of = os.path.splitext(pdf_file_name)[0] + '.txt'
        all_lines = []
        for k, v in items.items():
            print(k + ' -> ' + v)
            # 以下代码必须缩进在for循环内,否则仅处理最后一个字段
            if (v in ['/Yes', '/On']):
                all_lines.append(f"document.getElementById('{k}').checked = true;\n")
            elif (v in ['/0'] and k in fl_ext):
                all_lines.append(f"document.getElementById('{k}').checked = true;\n")
            elif (v in ['/No', '/Off', '']):
                all_lines.append(f"document.getElementById('{k}').checked = false;\n")
            elif (v in [''] and k in fl_ext):
                all_lines.append(f"document.getElementById('{k}').checked = false;\n")
            elif (k in fl):
                selectListOption(all_lines, k, v)
            else:
                all_lines.append(f"document.getElementById('{k}').value = '{v}';\n")
        # 使用with语句管理文件,避免忘记关闭文件
        with open(of, 'w') as outF:
            outF.writelines(all_lines)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:01:44