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

如何使用Python在无加密密码时自动填充加密PDF表单

可行性结论

完全可以实现。这类政府PDF模板属于所有者密码加密场景:加密仅限制正文内容编辑、页面调整等操作,开放表单填写权限属于PDF标准明确允许的操作范畴,不需要获取加密密码即可通过Python完成批量填充,填充后的文件保留原加密权限,不会触发机构端的文档合法性校验。

实现方案

目前有两个成熟的Python库可以直接处理这类加密PDF的表单填充,优先推荐pypdf,兼容性覆盖90%以上的标准政府表单模板。

方案1:使用pypdf(原PyPDF2)

这是目前最常用的纯Python PDF处理库,对标准AcroForm格式表单(绝大多数政务模板使用的表单格式)支持完善。

  1. 安装依赖
    pip install pypdf
    
  2. 第一步先提取模板内的所有表单域名称,不要手动猜字段名,避免填错位置:
    from pypdf import PdfReader
    
    reader = PdfReader("官方模板.pdf")
    # 输出所有可填写字段的名称、类型,后续填充用这些名称做key
    for field_name, field_info in reader.get_fields().items():
        print(f"字段名:{field_name},字段类型:{field_info.get('/FT')}")
    
  3. 批量填充表单代码
    from pypdf import PdfReader, PdfWriter
    
    # 加载加密模板,不需要传入密码
    reader = PdfReader("官方模板.pdf")
    writer = PdfWriter()
    # 导入原文档所有页面,自动保留原有加密权限设置
    writer.append(reader)
    
    # 替换成你实际要填充的内容,key为上一步拿到的字段名
    fill_content = {
        "姓名": "张三",
        "证件号": "1101011990XXXXXXX",
        "联系地址": "XX市XX区XX路XX号",
        # 补充其他需要填写的字段
    }
    
    # 遍历所有页面更新表单值
    for page in writer.pages:
        writer.update_page_form_field_values(page, fill_content)
    
    # 保存填充后的文件
    with open("填充完成_1.pdf", "wb") as output_file:
        writer.write(output_file)
    

方案2:使用pikepdf(兼容老旧特殊模板)

如果遇到pypdf填充后内容不显示、表单域格式错乱的老旧模板(尤其是部分使用XFA动态表单的老模板),可以换基于qpdf内核的pikepdf处理,对加密权限的兼容性更强。

  1. 安装依赖
    pip install pikepdf
    
  2. 填充示例代码
    import pikepdf
    
    # 无密码直接打开加密模板
    pdf = pikepdf.open("官方模板.pdf")
    acro_form = pdf.Root.AcroForm
    
    fill_content = {
        "姓名": "张三",
        "证件号": "1101011990XXXXXXX",
        # 同之前的填充内容
    }
    
    # 遍历字段填充
    for field in acro_form.Fields:
        current_field_name = str(field.T)
        if current_field_name in fill_content:
            field.V = fill_content[current_field_name]
            # 清空原有外观缓存,确保阅读器打开时能正常显示填充内容
            field.AP = None
    
    pdf.save("填充完成_pikepdf版本.pdf")
    pdf.close()
    
注意事项
  • 填充前一定要先通过代码导出所有表单域名称,部分模板的字段名是英文/数字编码,和页面上显示的中文标签不一致,手动猜很容易填错
  • 保存时不要选择“移除加密”“解密文档”类的操作,保留原文档的权限设置,否则可能导致机构端校验时判定文档被篡改
  • 正式批量填充前先拿1-2份测试文件验证,手动打开确认内容位置正确、没有触发编辑限制报错,再跑全量任务
  • 如果模板带预留的电子签章/数字签名位,普通表单填充不会破坏签名位有效性,不要修改签名相关的隐藏字段
  • 填充后用Adobe Reader打开时提示“文档已修改”属于正常情况,表单填写本身就是模板开放的允许操作,不影响提交。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 00:57:25