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

如何提取Adobe PDF表单控件位置属性,可使用Python实现吗

实现PDF表单控件位置提取的Python方案

完全可以通过Python实现该需求,以下是两种成熟的实现方案:


方案1:使用PyMuPDF(推荐,对表单控件的适配更完善

PyMuPDF(库导入名为fitz,可以直接识别所有主流表单控件类型,直接返回标准位置坐标

安装命令

pip install pymupdf

示例代码

import fitz

def extract_form_fields(pdf_path):
    doc = fitz.open(pdf_path)
    form_fields = []
    # 遍历PDF所有页
    for page_num, page in enumerate(doc, 1):
        # 遍历当前页所有表单控件
        for field in page.widgets():
            field_info = {
                "page_number": page_num,
                # 控件类型,直接返回可读文本
                "field_type": fitz.widget_types[field.field_type],
                "field_name": field.field_name,
                # 位置坐标格式:(左上x, 左上y, 右下x, 右下y),单位为PDF标准点
                "position": field.rect,
                # 控件当前填充/选中状态,可选返回
                "current_value": field.field_value
            }
            form_fields.append(field_info)
    return form_fields

# 调用示例
fields = extract_form_fields("你的PDF文件路径.pdf")
for item in fields:
    print(item)

可识别的控件类型对应关系:

  • 文本输入框:Text
  • 复选框:CheckBox
  • 单选按钮:RadioButton
  • 列表框:ListBox
  • 下拉选择框:ComboBox

方案2:使用PyPDF2实现

如果习惯用PyPDF2生态也可以实现,需要自行解析控件子类型

安装命令

pip install pypdf2

示例代码

from PyPDF2 import PdfReader

def extract_form_fields_pypdf2(pdf_path):
    reader = PdfReader(pdf_path)
    form_fields = []
    for page_num, page in enumerate(reader.pages, 1):
        if "/Annots" not in page:
            continue
        annots = page["/Annots"]
        for annot in annots:
            annot_obj = annot.get_object()
            # 筛选表单控件类注解
            if annot_obj.get("/Subtype") == "/Widget":
                field_info = {
                    "page_number": page_num,
                    "field_name": annot_obj.get("/T").decode() if annot_obj.get("/T") else None,
                    # 位置坐标格式:[x0, y0, x1, y1]
                    "position": annot_obj.get("/Rect"),
                    "field_type_flag": annot_obj.get("/FT")
                }
                form_fields.append(field_info)
    return form_fields

控件类型标识对应:

  • 文本框:/Tx
  • 按钮类(复选框、单选按钮都属于该大类,可通过额外字段细分):/Btn
  • 选择类(列表框、下拉框都属于该大类):/Ch

注意事项

  • PDF默认坐标原点在页面左下角,如果你需要转换为左上角为原点的坐标,用对应页面的高度减去y轴坐标值换算即可
  • 加密的PDF需要先提供密码解密后再提取,上述两个库都支持标准PDF解密功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:21:03