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

如何在LangChain中处理PDF表单?获取已填问卷答案

解决PDF问卷问题与填写答案同时提取的方法

PyPDFLoader默认仅提取PDF中的静态文本内容,而问卷中填写的答案通常存储在PDF表单字段中(不属于普通文本流),因此无法被直接获取。以下是几种可行的解决方案:

方法1:直接读取PDF表单字段(推荐)

使用PyPDF2库直接访问PDF的表单字段,获取每个字段对应的填写值:

from PyPDF2 import PdfReader

# 加载PDF文件
reader = PdfReader("files/blo-file.pdf")
# 如果PDF加密,先解密(无密码则传空字符串)
if reader.is_encrypted:
    reader.decrypt("")

# 遍历所有表单字段,输出问题/字段名和对应的答案
form_fields = reader.get_fields()
for field_label, field in form_fields.items():
    # 字段值存储在/V键中,默认显示"未填写"
    answer = field.get("/V", "未填写")
    print(f"问题:{field_label}")
    print(f"答案:{answer}\n")

这种方法适合结构化的问卷表单,能精准获取每个问题对应的填写答案。

方法2:结合LangChain与表单提取

如果需要保留LangChain的文档处理流程,可以先提取静态问题文本,再关联表单字段的答案:

from langchain.document_loaders import PyPDFLoader
from PyPDF2 import PdfReader

# 用LangChain提取问题文本
loader = PyPDFLoader("files/blo-file.pdf")
pages = loader.load_and_split()
question_content = "\n".join([page.page_content for page in pages])

# 提取表单答案
reader = PdfReader("files/blo-file.pdf")
if reader.is_encrypted:
    reader.decrypt("")
form_fields = reader.get_fields()

# 关联问题与答案(若字段名与问题文本匹配)
for field_label, field in form_fields.items():
    answer = field.get("/V", "未填写")
    print(f"问题:{field_label}")
    print(f"答案:{answer}\n")

若表单字段名与问题文本不直接对应,可能需要手动建立映射或通过文本匹配关联内容。

方法3:OCR提取非结构化填写内容

如果答案是手写输入或直接绘制在文本框中的非表单内容,需要用OCR工具提取:

from pdf2image import convert_from_path
import pytesseract

# 将PDF页面转换为图片
pdf_pages = convert_from_path("files/blo-file.pdf")

# 逐页执行OCR提取文本(中文问卷指定lang='chi_sim')
for page_num, page_img in enumerate(pdf_pages, 1):
    extracted_text = pytesseract.image_to_string(page_img, lang="chi_sim")
    print(f"第{page_num}页提取内容:\n{extracted_text}\n")

使用前需先安装依赖:pip install pdf2image pytesseract,并安装Tesseract OCR引擎(需配置环境变量)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:12:29