PDF 合并

表单处理 · PDF Forms

PDF 表单合并:怎样保住可填写字段 / PDF Form Merge: How to Keep Fillable Fields

合并带表单的 PDF,最常见的结局是页面合成了一份,原来的输入框却点不动、填不进、提交报错。这篇讲清楚字段为什么会失效,以及哪些流程能保住它们。

阅读约 7 分钟 · 7 min read

一句话结论

PDF 表单合并可以保住可填写字段,但要满足三个条件:源文件都是 AcroForm 表单、字段全名不冲突、合并过程保留原始页面对象。中间只要经过一次打印成 PDF 或导出为图片,字段就变成像素,没有回头路。

PDF form merge keeps fillable fields when both sources are AcroForm, no two fields share a fully qualified name, and the merge preserves the original page objects. One flattening step turns fields into pixels, and that cannot be undone.

为什么合并后表单字段会失效 / Why fields break when you merge

表单字段不是画在页面上的图形。它是挂在页面对象下的一层注释,带着字段名、类型、默认值、校验规则和计算脚本。合并时工具要把两个文件的页面对象读出来、重新编号、写进一个新文件。字段的父页面变了,字段名却没变。

如果两个文件各有一个 signature 字段,合并后的文件里就有两个同名字段。按 PDF 规范,字段名是唯一标识,同名的一批字段会被当成同一个字段的多个 widget。你在一处输入,另一处跟着变,看起来像文件坏了,其实是规范就是这样工作的。

失效表现直接原因能否恢复
字段变灰、点不动字段被扁平化成静态内容不能恢复,回到源文件重做
填一处,另一处跟着变合并后字段重名能恢复,重命名即可
能填但提交报缺少字段提交动作绑定的是旧文件能恢复,重新绑定按钮
金额或合计算错计算顺序依赖字段索引能恢复,重排计算顺序
下拉选项消失选项列表挂在被丢弃的对象上多数能恢复,重设选项

A form field is an annotation attached to a page object, carrying a name, type, default value, validation rule, and sometimes a calculation script. Merging renumbers page objects, so the parent reference changes while the name does not. Two fields named the same in the merged file are treated as widgets of one field, sharing a single value.

字段重名:合并失败的第一大原因 / Field name collisions

重名在单文件里看不出来,合并后才暴露。两个部门各自做的报销单都叫 amount,两份学校表格都有 student_name,这类冲突非常常见。

  1. 合并后在阅读器的表单编辑模式里打开字段列表,找重复项
  2. 给重名字段加前缀,改成 formA.amount 与 formB.amount
  3. 重新合并,再在两个字段里分别输入不同内容做验证
  4. 值互不覆盖才算分开,仍然同步说明前缀没生效

Collisions stay invisible inside one file and surface only after merging. Check the field list for duplicates, rename with a qualified prefix, then retest by typing different values into the two fields. If neither overwrites the other, they are separate.

哪些做法能保住字段 / What preserves fillable fields

做法字段是否保留说明
直接合并两个 AcroForm 文件通常保留需检查字段名是否重复
先打印成 PDF 再合并全部丢失字段被扁平化成图像
用导出为 PDF 另存多数保留少数阅读器会顺手扁平化
合并 XFA 表单基本丢失先转成 AcroForm 再合并
合并后再补字段原有加新增都保留适合加署名栏或日期栏
  • 合并前先各打开一次源文件,确认输入框还能点。源文件本身已扁平化,后面怎么操作都救不回来。
  • 避免任何中间转换:截图、扫描、虚拟打印机,这三条路都会把字段变成像素。
  • 合并顺序先定好再操作,合并完再拖动页面会再动一次字段的父级引用。
  • 带签名或金额计算的表单,合并后要重测提交,不能只看能不能填。

本地合规操作流程 / A local workflow

表单里填的是姓名、证件号、银行账号、薪资这类内容。上传到第三方服务器,意味着解密后的明文留在别人的机器上。全程在本地处理更稳妥。

  1. 逐个打开源文件,确认每个都是可填写的 AcroForm 表单
  2. 导出字段清单,比对重名项,先在源文件里改字段名
  3. 按目标顺序排列文件,确认页码连续
  4. 在本地合并,输出新文件
  5. 打开新文件,逐个测试输入、下拉、复选框和计算
  6. 测提交动作,确认提交地址和目标字段都在
  7. 确认无误后删除临时副本
本地合并带表单的 PDF →

排查清单 / Troubleshooting checklist

  • 字段全灰:源文件已被扁平化,回到原始版本重新合并
  • 输入值互相覆盖:字段重名,加前缀后重做
  • 提交按钮失效:提交动作引用的是旧文件的字段路径,重新绑定
  • 合并后体积暴涨:嵌入字体被重复打包,可用本地压缩收敛
  • 手机上填不了:部分移动阅读器对 JavaScript 计算支持有限,改用桌面端

常见问题

PDF 表单合并后还能填写吗?

多数情况可以,前提是源文件是 AcroForm 表单、字段名不冲突,且合并过程没有经过打印或图片化转换。合并后逐个字段测一遍是最稳的验证方式。

为什么两个文件里都有 name 字段,合并后填一个另一个跟着变?

因为字段名就是字段的身份标识。同名字段会被视为同一个字段的多个显示实例,共享同一个值。把其中一个改名就能分开。

XFA 表单能不能合并?

基本不能。XFA 的表单结构存在 XML 里,多数合并工具只处理页面树,会直接丢弃 XFA 内容。先用桌面阅读器转成 AcroForm,再走合并流程。

合并后字段保留,但下拉选项没了,怎么补?

打开表单编辑模式,选中该字段,重新录入选项列表。选项挂在字段对象上,重排页面时容易被丢掉,补一次即可,不影响已填的值。

Can I merge two fillable PDFs and still submit the result?

Yes, if both sources are AcroForm, field names are unique, and no flattening step runs in between. Retest the submit action afterwards, because it references field paths from the original file.

Why did my fields disappear after printing to PDF?

Printing rasterizes or repackages the page, so form widgets become static content and the field objects are dropped. Nothing later can restore them, so go back to the original file.

相关阅读 / Related