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

PyPDF2无法读取Adobe Sign签名后PDF的交互式表单元素求助

解决Adobe Sign签名后读取PDF交互式字段的问题

问题原因

Adobe Sign签名时,会对部分非文本类交互式字段(复选框、下拉框、日期选择器等)进行部分扁平化处理:移除字段的交互控件,但可能仍保留字段值在PDF的底层结构中。PyPDF2的get_Fields()方法对这类修改后的字段兼容性较差,无法正确识别,而文本字段因结构相对简单得以保留可访问性。

可行解决方案

1. 使用PyMuPDF(fitz)读取字段

PyMuPDF对PDF结构的解析能力更强,能识别签名后残留的各类字段字典,即使交互控件已被移除。示例代码:

import fitz

# 打开签名后的PDF
doc = fitz.open("signed_form.pdf")
# 获取所有表单字段
form_fields = doc.form_fields

# 遍历输出字段信息
for field in form_fields:
    field_type = ""
    if field.type == fitz.PDF_WIDGET_TYPE_CHECKBOX:
        field_type = "复选框"
    elif field.type == fitz.PDF_WIDGET_TYPE_COMBOBOX:
        field_type = "下拉框"
    elif field.type == fitz.PDF_WIDGET_TYPE_TEXT:
        field_type = "文本字段"
    elif field.type == fitz.PDF_WIDGET_TYPE_DATE:
        field_type = "日期选择器"
    print(f"字段名称: {field.name}, 字段类型: {field_type}, 字段值: {field.value}")

2. 手动解析PDF的AcroForm字典

如果PyMuPDF仍无法读取,可直接遍历PDF的AcroForm字段数组,手动解析字段类型和值(适合对PDF结构有基础了解的场景):

  • 建议升级到iText 7版本的RUPS工具,查看PDF的AcroForm -> Fields节点,确认目标字段是否还存在于字典中。
  • 若存在,可通过PyPDF2的底层API直接读取字段字典的/V(值)、/FT(类型)等键值对。示例代码片段:
from PyPDF2 import PdfReader

reader = PdfReader("signed_form.pdf")
# 解密PDF(如果需要)
if reader.is_encrypted:
    reader.decrypt("")

# 获取AcroForm字典
acroform = reader.trailer["/Root"].get("/AcroForm")
if acroform:
    fields = acroform.get("/Fields", [])
    for field in fields:
        field_dict = field.get_object()
        field_name = field_dict.get("/T").decode()
        field_type = field_dict.get("/FT").decode()
        field_value = field_dict.get("/V")
        # 针对不同类型字段处理值
        if field_type == "Btn":  # 复选框/单选框
            field_value = "选中" if field_value == "/Yes" else "未选中"
        elif field_type == "Ch":  # 下拉框/列表框
            field_value = field_value.decode() if isinstance(field_value, bytes) else field_value
        print(f"字段名: {field_name}, 类型: {field_type}, 值: {field_value}")

3. 升级iText版本

你之前使用的iText 5.5.9版本较旧,对签名后PDF的字段支持不足。升级到iText 7及对应的RUPS工具,能更准确地识别和读取签名后的各类交互式字段。

注意事项

如果Adobe Sign将字段完全扁平化(即字段字典被彻底移除,仅保留静态外观),则只能通过OCR工具提取内容,但根据你描述的文本字段仍可访问的情况,大概率字段字典未被完全删除,上述方法应该有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:05:47