PDF 表单填写

AcroForm 填写/导出

408 次访问
PDF FORM FILLER

PDF 表单填写

识别 AcroForm 表单字段 · 可视化填写 · 浏览器本地处理

📋
点击 / 拖拽含表单字段的 PDF

关于 PDF 表单

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 个字段。理赔员手动填写重复信息(如公司名称、日期)耗时。本工具支持预设模板,输入一次公司信息即可自动填充所有表单的相同字段,大幅提升处理速度。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (Adobe Acrobat)传统方法
数据隐私纯浏览器处理,文件不上传服务器需上传至 Adobe 云服务器处理文件需交给第三方打印店或同事,存在泄露风险
处理速度1-3 秒内完成填写5-15 秒(含上传下载时间)数小时至数天(人工填写、邮寄)
离线可用完全离线,无需网络需要网络连接完全离线
软件安装无需安装,打开浏览器即用需下载并安装数 GB 的桌面软件需安装 Adobe Reader 或类似软件
收费模式免费需订阅 Creative Cloud 或购买 Acrobat Pro按次收费(打印店)或人工成本
批量处理支持批量上传并填写同一表单支持,但需手动操作或编写脚本逐份手工填写,效率极低
填写精度精确匹配表单字段,无手写识别误差精确匹配,支持 OCR 识别扫描件手写易出错、字迹潦草导致无法识别

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 上传包含 AcroForm 字段的 PDF 文件(单文件 ≤ 50MB)
  2. 在表单字段列表中逐项填写文本、勾选复选框或选择下拉选项
  3. 点击「预览」检查填写内容是否完整、对齐无误
  4. 点击「导出」生成已填写的 PDF,下载到本地

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
一份包含姓名、身份证号、联系电话三个文本字段的空白 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 文件

常见错误对照7 个常踩的坑 · 错误 → 修复

1. 用非 AcroForm 的 PDF 直接填写

错误
上传一个扫描件图片转成的 PDF,点击“填写”后无反应
修复
确认 PDF 包含可编辑表单域(AcroForm);可用 Adobe Acrobat 打开查看“准备表单”功能是否识别出域

工具只处理 AcroForm 标准表单域。扫描件/图片 PDF 没有可交互字段,无法填写。

2. 填写后未点击“导出”直接关闭页面

错误
在浏览器预览中看到字段已填,关闭标签页,以为已保存
修复
填写完成后必须点击“导出”按钮下载已填写的 PDF 文件到本地

浏览器预览只是临时渲染,数据仅存在内存中;不导出则所有填写内容丢失。

3. 在只读/锁定字段上输入内容

错误
尝试在标灰的“姓名”字段输入文字,提示“不可编辑”
修复
检查字段属性:只读字段(ReadOnly)或锁定字段(Locked)无法通过工具填写;需先解除锁定或联系 PDF 制作者

AcroForm 字段可设 ReadOnly / Locked 标志,工具遵循字段定义,不强制修改。

4. 中文字符显示为乱码或方框

错误
在字段中输入“张三”,导出后 PDF 显示为“????”或“□□”
修复
确认 PDF 表单字段的字体支持中文(如宋体、微软雅黑);若原 PDF 使用西文字体,需在工具中勾选“嵌入中文字体”选项(如有)

AcroForm 字段字体由 PDF 模板定义,若字体不含中文字形,则无法正确渲染。

5. 填写内容超出字段可见区域

错误
在“备注”字段输入 500 字,导出后只显示前 50 字,其余被截断
修复
检查字段属性中的“多行”和“滚动”设置;若字段未开启多行且无滚动条,内容会被裁剪

AcroForm 字段可设 MaxLen 和 MultiLine 属性;超出限制的内容会被 PDF 渲染器截断而非自动换行。

6. 误将“填写”当作“编辑 PDF 文本”

错误
想修改 PDF 正文中的一段文字(如合同条款),用本工具点击正文区域无反应
修复
本工具仅填写预定义的 AcroForm 表单域;要修改正文内容需使用 PDF 编辑软件(如 Adobe Acrobat Pro)

AcroForm 是交互式表单域,与 PDF 页面文本是独立层;工具不提供文本编辑功能。

7. 上传加密/受保护的 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 或转换。

原理图

上传 PDF含 AcroForm 字段后端解析提取字段名/类型/值域用户填写文本框/复选框/下拉填充 & 导出生成已填写 PDF后端处理Go 引擎写入字段值下载结果保存到本地
用户输入 后端处理 输出结果

开发者集成

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.FillForm
const { 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 个高频疑问

怎么用这个工具填写PDF表单?需要上传什么格式?
上传PDF文件即可,工具会自动检测文件中是否包含AcroForm(可填写表单域)。支持的PDF版本为PDF 1.4及以上(2001年后生成的PDF基本都支持)。上传后工具会解析出所有文本输入框、复选框、下拉菜单等表单域,在网页上生成可编辑的字段列表。填写完成后点击导出,会生成一份已填写的PDF文件,保留原表单结构,不会转成图片或扫描件。如果上传的PDF没有表单域(比如普通扫描件),工具会提示“未检测到可填写字段”,此时无法使用本工具。
为什么我填写的表单导出后,中文字符显示为方框或乱码?
PDF表单中的中文字体缺失是常见原因。AcroForm依赖嵌入字体来显示文字,如果原PDF未嵌入中文字体,工具在填写时无法找到对应字形,导出的PDF中中文字符就会显示为方框。解决方法:在导出时选择“嵌入中文字体”选项(本工具默认开启),工具会嵌入Noto Sans CJK(思源黑体)到PDF中,文件体积会增大2-3MB。如果填写后仍然乱码,说明原PDF的表单域字体设置强制使用了特定西文字体,建议用Adobe Acrobat先检查表单域属性。
填完的表单别人能编辑修改吗?怎么锁定内容?
本工具导出的PDF默认不锁定表单域,接收方用任何PDF阅读器(包括免费版Adobe Acrobat、浏览器内置PDF阅读器)都能继续修改已填写的内容。如果需要防篡改,导出后自行用其他工具对PDF做“扁平化”处理(将表单域内容转为普通文本)或添加数字签名。本工具目前不内置锁定功能,因为部分用户需要导出后继续调整填写内容(比如多次审核场景)。如果希望彻底不可编辑,导出后可以在Adobe Acrobat中点击“准备表单 → 更多 → 仅填充并打印”。
这个工具和Adobe Acrobat在线填写有什么区别?哪个更准?
核心区别在于表单域的解析精度和对复杂表单的支持。Adobe Acrobat使用Adobe自家的表单引擎,能识别隐藏字段、计算字段、JavaScript脚本等高级特性,本工具采用开源PDF库解析AcroForm,对标准文本输入框、复选框、下拉菜单的兼容性在95%以上,但对以下场景支持较差:依赖JavaScript计算(比如自动计算总价)、数字签名字段、XFA表单(Adobe LiveCycle设计的动态表单)。如果只是填写政府表格、合同模板、调查问卷这类标准AcroForm,本工具完全够用且无需注册。
上传的PDF文件会存到你们服务器吗?隐私安全吗?
本工具采用后端处理(BE),文件会临时上传到服务器进行表单解析和填写处理。处理完成后,原始PDF和填写后的PDF会在30分钟后从服务器永久删除,不保留任何副本。服务器位于国内机房,数据传输全程HTTPS加密。如果文件涉及身份证、合同、财务报表等敏感信息,建议在填写后立即下载导出文件,然后关闭浏览器页面——服务器端的自动清理机制会删除缓存。不支持离线使用,因为表单解析依赖后端Go服务。
为什么有些表单域(比如签名框、日期选择器)在网页上无法填写?
本工具只支持填写AcroForm中的标准字段类型:文本输入框(Tx)、复选框(Btn,无PushButton类型)、单选按钮(Btn,有PushButton类型)、下拉菜单(Ch)、列表框(Ch)、按钮(PushButton类型不支持点击响应)。签名框(Sig字段)、日期选择器(如果依赖JavaScript弹出日历)属于不可编辑字段,网页上不会显示输入区域。如果PDF中有签名框,建议用其他工具(如Adobe Acrobat Reader的“填写和签名”功能)手动签名后覆盖。
填到一半不小心关掉页面了,能恢复吗?
不能自动恢复。所有填写操作均在浏览器内存中进行,关闭页面或刷新浏览器会清空已填写的内容。建议在填写过程中定期点击“导出”保存中间版本——导出的PDF会保留当前已填写的所有字段,下次上传该PDF可以继续填写剩余字段(已填内容不会丢失)。如果表单字段较多(超过20个),可以先用文本编辑器把关键信息写下来,再逐项填入。没有自动保存或云存档功能,这是为了保护隐私(不持久化存储用户数据)。
为什么同一个PDF表单,我用这个工具填完导出后文件大小翻了好几倍?
主要原因有两个:1)中文字体嵌入:工具默认嵌入思源黑体(约15MB)到PDF中,以确保中文字符正常显示,这会显著增加文件体积。如果原PDF本身已嵌入中文字体,工具会复用已有字体,体积增加较小。2)表单数据追加:填写后的数据以增量更新方式追加到PDF尾部,不会覆盖原始结构,也会增加文件大小。如果文件太大,导出后可以用其他PDF压缩工具(如ilovepdf、smallpdf)做二次压缩,通常能压到原大小的30-50%。
选择 打开 +新窗口 esc关闭