如何用Python提取PDF文件中的单选按钮/复选框选中状态信息?
如何用Python提取PDF中的单选按钮/复选框选中状态?
我需要获取PDF文档中的单选按钮和复选框的选中状态信息,尝试过pdfplumber和PyPDF2模块但没找到可行方案。目前只能用以下代码提取文本,无法得知哪个单选/复选框处于选中状态:
import pdfplumber import os import sys if __name__ == '__main__': path = os.path.abspath(os.path.dirname(sys.argv[0])) fn = os.path.join(path, "input.pdf") pdf = pdfplumber.open(fn) page = pdf.pages[0] text = page.extract_text()
解决方案:使用PyMuPDF(fitz)提取表单字段状态
PyMuPDF对PDF可编辑表单的元素支持更完善,能直接获取单选按钮、复选框的选中状态,具体步骤如下:
- 安装依赖库:
pip install pymupdf
- 提取表单字段状态的代码示例:
import fitz import os import sys if __name__ == '__main__': path = os.path.abspath(os.path.dirname(sys.argv[0])) fn = os.path.join(path, "input.pdf") # 打开PDF文档 doc = fitz.open(fn) # 遍历所有页面的表单字段 for page_num in range(len(doc)): page = doc[page_num] # 获取当前页面的所有交互表单元素 fields = page.widgets() if fields: print(f"--- 第 {page_num+1} 页表单字段 ---") for field in fields: # 筛选单选按钮和复选框类型 if field.field_type in (fitz.PDF_WIDGET_TYPE_RADIOBUTTON, fitz.PDF_WIDGET_TYPE_CHECKBOX): # 提取关键信息 field_type = "单选按钮" if field.field_type == fitz.PDF_WIDGET_TYPE_RADIOBUTTON else "复选框" field_label = field.field_label if field.field_label else "无标签" is_checked = "已选中" if field.field_value == 1 else "未选中" print(f"类型: {field_type}") print(f"标签: {field_label}") print(f"选中状态: {is_checked}") print("---")
- 关键说明:
page.widgets():获取当前页面所有可交互的表单元素- 字段类型判断:通过
fitz.PDF_WIDGET_TYPE_RADIOBUTTON和fitz.PDF_WIDGET_TYPE_CHECKBOX区分单选/复选框 - 选中状态标识:
field_value为1表示选中,0表示未选中 - 标签匹配:
field_label对应表单元素的显示文本,可直接关联到文档内容
特殊情况处理:如果目标PDF是扫描生成的图片型PDF(非可编辑表单),上述方法无效,需要结合OCR工具(如pytesseract)识别页面中的勾选图形(如√、填充块)来判断选中状态。
内容的提问来源于stack exchange,提问作者Rapid1898
相关产品推荐
相关产品推荐

