PDF 表单填写与检查
填字段的同时,看着表单一边被你填、一边评判自己:什么是必填却还空着的、什么值不在允许的选项里、哪些字段其实偷偷是同一个字段。填完带着重新生成的外观下载,这样值到哪里都显示得出来。
🔒 你的表单不会离开浏览器。
把一份 PDF 表单拖到这里
一次一个 PDF · 什么都不上传
一个值,和你看到的东西,是两个不同的对象
AcroForm 把一个字段的值存在一个地方,把画出这个值的外观流存在另一个地方。只写值而不重新生成外观,你就会得到一份文件——在一个阅读器里能看到答案,换一个阅读器就是一个空框,打印出来也是空的。这是填好的 PDF 里最让人摸不着头脑的一件事,而这个工具在下载时会重新生成外观,不让这件事发生。
共用一个名字的字段其实是同一个字段
两个带着同一个完整限定名的控件不是两个字段;它们是同一个字段被画了两次。在任意一个里输入,两个都会变。这有时候正是设计的目的——一个参考号在每一页上重复出现——有时候是复制粘贴的意外,而这两种情况看起来一模一样,直到有人填表单时看见第四页也跟着变了。
这个工具不做的事
它不会签署任何东西,而且刻意不去动签名字段:签名覆盖的是文档的字节,所以签完名之后再填一个字段会让签名失效。先填完,最后再签。它也不会创建表单字段——这个工具是给别人已经搭好的表单用的。
本工具的全部检查项(共 8 条)
PFF-001 一个必填字段是空的
这个字段带着必填标记,却没有值。接收表单的一方有权拒收它,而发送方通常根本看不到这个标记——大多数阅读器把必填字段显示得和普通字段一模一样,直到提交失败才露馅。
修复: 把它填上,或者去问表单作者这个标记是不是真的有意为之。
yaktool 工程规则,不是引自规范的条文:依据的是 AcroForm 字段在阅读器里的实际表现。PDF 32000 定义了字段字典;怎样的表单会被拒收,是我们对它的解读,并标明了是我们的。
PFF-002 这个值不是字段允许的选项之一
下拉框、列表框与单选组都带着一份明确的允许取值列表。一个不在这份列表里的值照样能被写进文件——没有任何东西会阻止——然后控件要么显示空白,要么按阅读器的实现回退到第一个选项。这是一个存在于字节里、却不存在于页面上的值。
修复: 用这个字段列出的选项之一。
yaktool 工程规则,不是引自规范的条文:依据的是 AcroForm 字段在阅读器里的实际表现。PDF 32000 定义了字段字典;怎样的表单会被拒收,是我们对它的解读,并标明了是我们的。
PFF-003 这个值比字段允许的长度还长
一个带 MaxLen 的文本字段,在阅读器里手动输入时会被截断,但用程序写进去的值不会被截断——它只是比字段声明的长度更长。溢出的部分在屏幕上看不见,却真实存在于数据里。
修复: 把值缩短到声明的最大长度以内。
yaktool 工程规则,不是引自规范的条文:依据的是 AcroForm 字段在阅读器里的实际表现。PDF 32000 定义了字段字典;怎样的表单会被拒收,是我们对它的解读,并标明了是我们的。
PFF-004 一个只读字段被要求修改
这个字段带着只读标记。在字节层面写入它会成功,而阅读器却不允许人去编辑它——正是这种不对称,制造出一份没人能解释的文档:一个表单本来设计成固定不变的值,被某个工具改掉了。
修复: 别动它,或者如果这份表单是你自己的,刻意去掉只读标记。
yaktool 工程规则,不是引自规范的条文:依据的是 AcroForm 字段在阅读器里的实际表现。PDF 32000 定义了字段字典;怎样的表单会被拒收,是我们对它的解读,并标明了是我们的。
PFF-005 好几个字段共用一个名字
名字完全一致的字段其实是同一个字段的好几个控件:在一个里输入,其余的也会跟着变。这有时候是有意为之(同一个名字在每一页上重复出现),有时候是复制粘贴的意外——这两种情况分不出来,直到有人填表单时看见另一页也跟着变了才发现。
yaktool 工程规则,不是引自规范的条文:依据的是 AcroForm 字段在阅读器里的实际表现。PDF 32000 定义了字段字典;怎样的表单会被拒收,是我们对它的解读,并标明了是我们的。
PFF-006 要填的这个字段在这份表单里不存在
填充请求点了名字的这个字段,文档里没有。悄悄忽略它,正是一份表单带着一半答案缺失就发出去的成因,所以这里选择报出来——最常见的原因是拼写有出入,或者是一个完整限定名(parent.child)漏写了它的父级。
修复: 对照字段清单核实准确的名字;它们是区分大小写的。
yaktool 工程规则,不是引自规范的条文:依据的是 AcroForm 字段在阅读器里的实际表现。PDF 32000 定义了字段字典;怎样的表单会被拒收,是我们对它的解读,并标明了是我们的。
PFF-007 这份表单带着签名字段
存在一个签名字段。填完表单的其余部分没问题,但签名一旦应用之后再做任何改动都会让它失效——所以操作的先后顺序很重要:先填完,最后再签。
yaktool 工程规则,不是引自规范的条文:依据的是 AcroForm 字段在阅读器里的实际表现。PDF 32000 定义了字段字典;怎样的表单会被拒收,是我们对它的解读,并标明了是我们的。
PFF-008 值已经写进去了,但表单没有要求阅读器重新画出来
AcroForm 存储一个字段的值,同时分开存储画出这个值的外观流。只设置值而不重新生成外观流,会留下一份文件——有些阅读器显示新值,有些显示一个空框,打印出来也一样。文档里有数据,页面上却看不到。告诉阅读器自己去画值的那个开关叫 NeedAppearances,这里它是关着的。
修复: 填完之后重新生成字段外观,或者在表单上打开 NeedAppearances。
yaktool 工程规则,不是引自规范的条文:依据的是 AcroForm 字段在阅读器里的实际表现。PDF 32000 定义了字段字典;怎样的表单会被拒收,是我们对它的解读,并标明了是我们的。
关于这些规则。 每一条都有编号、严重级别和通俗解释。每个来源链接都已登记在案,并对线上页面实际复验过,而不是凭印象写上去的. 规则如何编写、测试与保持更新 →