今天在调研自动生成人事系统的入职文件时,我才知道 PDF 交互式表单字段(AcroForms)这个东东。我以为 PDF 格式就是不能编辑的。。。原来 PDF 是可以包含类似网页 form 表单的,可以直接通过 pdfcpu 命令工具,获取其他库用代码进行自动填充。

使用 pdfcpu 可以检测一个 pdf 文件是否包含交互式表单。并通过命令行填充表单。
安装 pdfcpu
go install github.com/pdfcpu/pdfcpu/cmd/pdfcpu@latest
最神奇的是,这个居然给我自动安装上了 go 1.25。我本地的 go 版本总是被迫升级。
go: downloading github.com/pdfcpu/pdfcpu v0.11.1
go: github.com/pdfcpu/pdfcpu@v0.11.1 requires go >= 1.24.0; switching to go1.25.7
go: downloading go1.25.7 (linux/amd64)
go: downloading github.com/hhrutter/pkcs7 v0.2.0
go: downloading github.com/hhrutter/tiff v1.0.2
go: downloading github.com/hhrutter/lzw v1.0.0
go: downloading golang.org/x/image v0.32.0
go: downloading golang.org/x/text v0.30.0
go: downloading github.com/mattn/go-runewidth v0.0.19
go: downloading github.com/clipperhouse/uax29/v2 v2.2.0
不包含交互式表单的情况
可以用官方提供这个 pdf 样例做测试:
https://github.com/pdfcpu/pdfcpu/blob/master/pkg/samples/form/demo/english.pdf
> pdfcpu form list test.pdf
installing user font:
Roboto-Regular
pdfcpu: no form available
包含交互式表单的情况
同样是输入如下命令:
pdfcpu form list english.pdf
可以看到结果如下图

每个字段有对应的名字。
自动对表单填充
新建一个 english.json 的文件,内容如下:
{
"header": {
"source": "english.pdf",
"version": "pdfcpu v0.4.1",
"creation": "2023-04-04 20:22:17 CET",
"producer": "pdfcpu v0.4.1"
},
"forms": [
"textfield": [
{
"name": "firstName",
"value": "Horst",
"locked": false
}
],
"datefield": [
{
"name": "dob",
"value": "31.12.1999",
"locked": true
}
],
}
]
}
执行命令:
$ pdfcpu form fill english.pdf english.json tmp.pdf
就能实现自动填充,非常方便
如何将 word 转换为包含表单的 pdf
这个我没测试过,不知道是否可行,但是 gemini 说可以使用 LibreOffice Writer (直接导出)
- 用 LibreOffice 打开你的 Word 文档。
- 开启 “视图 -> 工具栏 -> 表单控件”。
- 在文档中插入“文本框”或“复选框”控件。
- 点击 “文件 -> 导出为 PDF”。
- 在弹出窗口中确保勾选了 “创建 PDF 表单”。
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式