PDF 表单填写
识别 AcroForm 表单字段 · 可视化填写 · 浏览器本地处理
AcroForm 填写/导出
识别 AcroForm 表单字段 · 可视化填写 · 浏览器本地处理
AcroForm:标准 PDF 表单,支持文本框 / 复选框 / 单选 / 下拉列表 / 签名字段。
XFA:Adobe 自家格式,使用率低且 ISO 已弃用,本工具不支持。
扁平化:将填好的字段固化为页面内容,使 PDF 不再可编辑(适合提交终稿)。
了解工具定位 · 使用场景 · 对比优势
直接填写 PDF 表单中的 AcroForm 字段,并导出已填写的文档。需要处理大量 PDF 表单的行政人员、财务或 HR 避免逐份手动填写,上传后由后端处理,支持复杂表单结构。文件处理完成后自动从服务器删除,不保留副本。
HR 部门收到 200 份员工入职合同 PDF,每份包含 15 个 AcroForm 字段(姓名、岗位、薪资等)。手动填写费时且易错。本工具支持上传 PDF 后批量填写相同字段值,或从 Excel 逐行导入差异化数据,一次性生成所有已填合同,将 2 天工作量压缩到 30 分钟。
中小企业申报政府补贴时需提交《企业信息登记表》PDF,含法人信息、营收数据等 20 个必填字段。财务人员反复核对纸质版易漏填。本工具直接在浏览器中打开 PDF 表单,自动高亮未填字段,填写后导出为已填 PDF,避免打印扫描的流程损耗。
科研团队向 500 名受访者发放 AcroForm 格式的《心理健康量表》,受访者需在 PDF 中勾选选项并填写分数。传统方式需逐一打开 PDF 提取数据。本工具支持批量导出所有已填表单中的字段值到 CSV,直接导入 SPSS 分析,省去人工转录环节。
医院需让每位手术患者签署《手术知情同意书》PDF,包含手术名称、风险告知等 10 个字段。护士手动填写患者信息效率低且易写错。本工具允许医生在诊室直接填写患者基本信息,患者确认后一键导出带签名栏的已填 PDF,再手写签名即可归档。
保险公司每天处理上千份《理赔申请表》PDF,每份含保单号、事故描述、银行账号等 12 个字段。理赔员手动填写重复信息(如公司名称、日期)耗时。本工具支持预设模板,输入一次公司信息即可自动填充所有表单的相同字段,大幅提升处理速度。
| 维度 | 本工具 | 竞品 A (Adobe Acrobat) | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不上传服务器 | 需上传至 Adobe 云服务器处理 | 文件需交给第三方打印店或同事,存在泄露风险 |
| 处理速度 | 1-3 秒内完成填写 | 5-15 秒(含上传下载时间) | 数小时至数天(人工填写、邮寄) |
| 离线可用 | 完全离线,无需网络 | 需要网络连接 | 完全离线 |
| 软件安装 | 无需安装,打开浏览器即用 | 需下载并安装数 GB 的桌面软件 | 需安装 Adobe Reader 或类似软件 |
| 收费模式 | 免费 | 需订阅 Creative Cloud 或购买 Acrobat Pro | 按次收费(打印店)或人工成本 |
| 批量处理 | 支持批量上传并填写同一表单 | 支持,但需手动操作或编写脚本 | 逐份手工填写,效率极低 |
| 填写精度 | 精确匹配表单字段,无手写识别误差 | 精确匹配,支持 OCR 识别扫描件 | 手写易出错、字迹潦草导致无法识别 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 一份包含姓名、身份证号、联系电话三个文本字段的空白 PDF 表单文件(文件名为 form1.pdf) | 生成一份已填写完成的 PDF 文件(form1_filled.pdf),其中姓名栏填入“张三”,身份证号栏填入“110101199001011234”,联系电话栏填入“13800138000” | 典型场景:用户需要快速填充个人信息到标准表格 |
| 一份包含复选框(如“同意条款”)、单选按钮(如“性别:男/女”)、下拉菜单(如“省份:北京/上海/广州”)的 PDF 表单文件(文件名为 form2.pdf) | 生成一份已填写完成的 PDF 文件(form2_filled.pdf),其中复选框被勾选,单选按钮选择“男”,下拉菜单选择“北京” | 典型场景:处理包含多种控件类型的复杂表单 |
| 一份包含日期字段(格式要求为 YYYY-MM-DD)和数字字段(如“年龄”)的 PDF 表单文件(文件名为 form3.pdf) | 生成一份已填写完成的 PDF 文件(form3_filled.pdf),日期字段填入“2025-01-15”,年龄字段填入“35” | 典型场景:用户需要填写日期和数字类型字段 |
| 一份包含只读字段(如“编号”)和必填字段(如“签名”)的 PDF 表单文件(文件名为 form4.pdf) | 生成一份已填写完成的 PDF 文件(form4_filled.pdf),只读字段保持原值不变,必填字段“签名”被填入用户提供的文本 | 边界 case:只读字段不可编辑,工具应跳过而非报错 |
| 一份包含 100 个以上字段的大型 PDF 表单文件(文件名为 form5.pdf) | 生成一份已填写完成的 PDF 文件(form5_filled.pdf),所有字段按用户提供的映射数据填充,无遗漏 | 边界 case:测试工具对大量字段的处理性能和稳定性 |
| 一份包含中文字段名(如“姓名”、“出生日期”)和英文字段名(如“Name”、“DOB”)混合的 PDF 表单文件(文件名为 form6.pdf) | 生成一份已填写完成的 PDF 文件(form6_filled.pdf),中文字段填入对应中文内容,英文字段填入对应英文内容 | 易错 case:字段名编码不一致可能导致匹配失败 |
| 一份包含加密或受密码保护的 PDF 表单文件(文件名为 form7.pdf,密码为“123456”) | 返回错误提示:“无法处理加密的 PDF 文件,请先解除密码保护” | 易错 case:用户可能忘记文件有密码保护 |
| 一份非 PDF 格式的文件(如 .docx 文件,文件名为 form8.docx) | 返回错误提示:“不支持的文件格式,请上传 PDF 文件” | 易错 case:用户误传非 PDF 文件 |
上传一个扫描件图片转成的 PDF,点击“填写”后无反应确认 PDF 包含可编辑表单域(AcroForm);可用 Adobe Acrobat 打开查看“准备表单”功能是否识别出域工具只处理 AcroForm 标准表单域。扫描件/图片 PDF 没有可交互字段,无法填写。
在浏览器预览中看到字段已填,关闭标签页,以为已保存填写完成后必须点击“导出”按钮下载已填写的 PDF 文件到本地浏览器预览只是临时渲染,数据仅存在内存中;不导出则所有填写内容丢失。
尝试在标灰的“姓名”字段输入文字,提示“不可编辑”检查字段属性:只读字段(ReadOnly)或锁定字段(Locked)无法通过工具填写;需先解除锁定或联系 PDF 制作者AcroForm 字段可设 ReadOnly / Locked 标志,工具遵循字段定义,不强制修改。
在字段中输入“张三”,导出后 PDF 显示为“????”或“□□”确认 PDF 表单字段的字体支持中文(如宋体、微软雅黑);若原 PDF 使用西文字体,需在工具中勾选“嵌入中文字体”选项(如有)AcroForm 字段字体由 PDF 模板定义,若字体不含中文字形,则无法正确渲染。
在“备注”字段输入 500 字,导出后只显示前 50 字,其余被截断检查字段属性中的“多行”和“滚动”设置;若字段未开启多行且无滚动条,内容会被裁剪AcroForm 字段可设 MaxLen 和 MultiLine 属性;超出限制的内容会被 PDF 渲染器截断而非自动换行。
想修改 PDF 正文中的一段文字(如合同条款),用本工具点击正文区域无反应本工具仅填写预定义的 AcroForm 表单域;要修改正文内容需使用 PDF 编辑软件(如 Adobe Acrobat Pro)AcroForm 是交互式表单域,与 PDF 页面文本是独立层;工具不提供文本编辑功能。
上传带打开密码的 PDF,工具提示“无法解析”先使用其他工具解除 PDF 打开密码保护,再上传到本工具填写工具不处理加密 PDF(需密码解密);仅处理无密码或仅允许填写的受保护 PDF。
公式推导 · 流程图解 · 依据出处
无单一数学公式,核心操作为:解析 PDF 中的 AcroForm 字段定义 → 匹配用户输入数据 → 填充字段值 → 展平表单(可选)
AcroForm 字段 — PDF 中预定义的交互式表单域(文本框、复选框等)用户输入数据 — 用户提供的键值对,键对应字段名,值为填充内容展平 — 将可编辑字段转为静态内容,防止后续修改用户上传一份《W-9 税务表单》PDF,其中包含字段:Name(文本框)、BusinessName(文本框)、Address(文本框)、Certify(复选框)。用户输入:{Name: "张三", BusinessName: "ABC 公司", Address: "北京市朝阳区", Certify: true}。工具解析 PDF 后,将 Name 字段填充为“张三”,BusinessName 填充为“ABC 公司”,Address 填充为“北京市朝阳区”,Certify 复选框勾选。最终输出一份已填写的 PDF,可选择是否展平。
适用于包含 AcroForm 字段的标准 PDF 表单(如税务表、合同模板、调查问卷)。不适用于非交互式 PDF(扫描件、图片型 PDF)或 XFA 表单(Adobe LiveCycle 格式),此类需先 OCR 或转换。
3 种主流语言 · 复制即用
from pypdf import PdfReader, PdfWriter
# 填写 AcroForm 表单字段
reader = PdfReader("form.pdf")
writer = PdfWriter()
# 复制页面并填充字段
for page in reader.pages:
writer.add_page(page)
# 获取表单字段名称
fields = reader.get_fields()
print("表单字段:", list(fields.keys()))
# 填写字段值
writer.update_page_form_field_values(
writer.pages[0],
{"name": "张三", "id": "123456", "date": "2024-01-15"}
)
# 保存填写后的 PDF
with open("filled.pdf", "wb") as f:
writer.write(f)
# 提取已填写的字段值
reader2 = PdfReader("filled.pdf")
for field_name, field in reader2.get_fields().items():
print(f"{field_name}: {field.get('/V')}")package main
import (
"fmt"
"github.com/pdfcpu/pdfcpu/pkg/api"
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu/model"
)
func main() {
// 填写 AcroForm 字段
values := map[string]string{
"name": "张三",
"id": "123456",
"date": "2024-01-15",
}
// 填写表单并保存为新文件
if err := api.FillFormFile("form.pdf", "filled.pdf", values, nil, nil); err != nil {
panic(err)
}
// 读取已填写的字段值
fields, err := api.ListFieldsFile("filled.pdf", nil, nil)
if err != nil {
panic(err)
}
for _, f := range fields {
fmt.Printf("%s: %v\n", f.Name(), f.Value())
}
}
// 需要初始化配置:
// conf := model.NewDefaultConfiguration()
// conf.Cmd = model.FillFormconst { PDFDocument } = require('pdf-lib');
const fs = require('fs');
async function fillForm() {
// 读取 PDF
const formBytes = fs.readFileSync('form.pdf');
const pdfDoc = await PDFDocument.load(formBytes);
// 获取表单
const form = pdfDoc.getForm();
const fields = form.getFields();
console.log('表单字段:', fields.map(f => f.getName()));
// 填写文本字段
form.getTextField('name').setText('张三');
form.getTextField('id').setText('123456');
form.getTextField('date').setText('2024-01-15');
// 保存
const pdfBytes = await pdfDoc.save();
fs.writeFileSync('filled.pdf', pdfBytes);
// 读取已填写的值
const pdfDoc2 = await PDFDocument.load(fs.readFileSync('filled.pdf'));
const form2 = pdfDoc2.getForm();
console.log('name:', form2.getTextField('name').getText());
}
fillForm().catch(console.error);8 个高频疑问