PDF 合并后体积暴涨、表单失效、页面忽大忽小:拼接的隐藏代价

· 约 4 分钟 📑 PDF 合并

“把几个 PDF 拼成一个”听起来是最简单的操作,但合并完经常发现:体积莫名其妙翻了几倍、原来能填的表单变成死的、每页大小对不齐、有的文件死活加不进来。这些都不是工具的 bug,而是**“逐页复制”这种合并方式的机制决定的**。搞清楚合并到底搬走了什么、留下了什么,就不会再被这些”意外”绊倒。

合并到底做了什么

本工具(和大多数纯前端合并器)用的是 pdf-lib 的 copyPages按你排的顺序,把每份 PDF 的每一页,连同这一页引用的字体、图片,逐页复制进一个新文件

关键词是”逐页”和”页面级”——它复制的是页面,不是整个文档。而 PDF 里有一批东西是挂在文档级的,逐页复制天然搬不走。

会保留 vs 会丢失

内容属于哪一级合并后
页面正文(文字、矢量图)页面级✅ 原样保留
页面上的图片页面级✅ 保留(但不去重)
外部网址链接(URI)页面级注释✅ 一般保留
页面自带的文字层页面级✅ 保留,仍可搜索复制
书签 / 大纲(outline)文档级❌ 丢失
交互表单字段(AcroForm)文档级❌ 失效
页内跳转链接(GoTo)依赖页对象⚠ 可能失灵
文档元数据(作者、标题)文档级⚠ 不保证
页面物理尺寸页面级✅ 各自保留(不归一化)

一句话:页面上”画得出来”的东西基本都在,文档级的”结构性”东西(书签、表单、目录逻辑)基本都掉。

为什么体积会暴涨

这是最反直觉的一点:合并后体积可能 ≥ 各份之和

原因是字体和资源不跨文件去重

文档 A(3MB,内嵌思源黑体子集 2MB)
文档 B(3MB,内嵌同一套思源黑体子集 2MB)
文档 C(3MB,内嵌同一套思源黑体子集 2MB)
        ↓ 逐页复制合并
合并结果 ≈ 9MB(三份字体各留一份,没合并)

中文 / 日文文档尤其明显——CJK 字体子集动辄一两 MB,几份一叠就上去了。

怎么办:合并完再跑一次 PDF 压缩。压缩里的”字体子集化 + 对象去重”会把重复字体归并成一份,通常能把膨胀的体积压回接近原始水平。顺序是先合并、后压缩。

为什么页面忽大忽小

本工具不做尺寸归一化,每页保留原文件里的物理尺寸。常见翻车:

  • A4 报告 + Letter 合同 + 横版 PPT 导出 → 合并后三种尺寸并存
  • 屏幕滚动看不出问题,一打印就乱:打印机按每页各自尺寸缩放,有的顶格有的大留白
  • 装订、骑缝盖章时页面对不齐

怎么办:只在屏幕上看,无所谓;要打印或装订,先把各份统一到同一尺寸再合并——比如照片 / 扫描件先过”图片转 PDF”的 A4 排版,或用 Acrobat 统一页面尺寸。

表单和链接为什么失效

表单:PDF 的交互表单是”页面上的输入框外观 + 文档级的字段字典”两部分。逐页复制只搬输入框的样子,不搬字段字典 → 输入框还在,但不再是活的字段,点了不能填、勾选框不响应、自动计算失灵。

链接

  • 外部网址https://…)→ 一般保留
  • 页内跳转(“见第 12 页”那种)→ 目标是具体页对象,跨文件复制后容易对不上,点了跳错或没反应
  • 书签(左侧大纲)→ 文档级,直接消失

需要保留可填表单或完整书签的场景,不要用逐页复制型合并——先各自处理好,或上 Acrobat。

加密文件为什么加不进来

合并遇到设了密码的 PDF 会直接报”合并失败”。

  • 数页数时能容忍加密(只读结构不解内容)
  • 真正复制页面时按标准方式加载,加密文件会抛错

解法:先用 PDF 解密移除打开密码和复制/打印限制,拿到无密码版本,再来合并。

顺序这件事

合并顺序 = 你在列表里排的顺序,用拖拽或上下箭头调整,所见即所得。

别指望”按文件名自动排”——1.pdf, 2.pdf, …, 10.pdf 的字典序会变成 1, 10, 2, 3…10 插到 2 前面。规范做法是给文件名补零前缀(01.pdf02.pdf),但既然本工具支持拖拽,直接拖最稳。

合并前的自检清单

  1. 要保留可填表单? → 别合并,或用 Acrobat
  2. 要保留书签 / 目录跳转? → 合并后需重建,或换专业工具
  3. 要打印 / 装订? → 先统一页面尺寸再合并
  4. 有加密文件? → 先解密
  5. 在意体积? → 合并后再压一次
  6. 顺序? → 拖拽排序,别信文件名

一句话总结

逐页复制型合并只搬”页面”,搬不走书签、表单这些文档级结构,也不跨文件去重字体(所以体积会涨)、不统一页面尺寸(所以打印会乱),加密文件要先解密——把这些当成机制而非 bug,先处理好再合并。

❓ 常见问题

合并后 PDF 体积比几份加起来还大,是不是没压缩?

是字体和资源重复嵌入导致的,不是漏压缩。逐页复制型的合并(本工具用 pdf-lib 的 copyPages)会把每一页连同它引用的字体、图片原样搬进新文件,不跨文件去重。三份文档如果各自嵌入了同一套中文字体子集,合并后就有三份字体躺在里面。所以体积可能等于各份之和,甚至因为对象表膨胀略大。解法:合并完再跑一次 PDF 压缩(字体子集化 + 对象去重),能把重复字体合并回一份。

合并前能填的表单,合并后为什么填不了 / 填了不显示?

表单字段(AcroForm)挂在文档级,逐页复制搬不走这层结构。PDF 的交互表单由两部分组成:页面上的输入框外观(widget,属于页面),和文档级的 /AcroForm 字典(记录字段名、类型、计算逻辑)。copyPages 只复制页面,/AcroForm 不会被合并——结果是输入框还画在那儿,但不再是"活的"字段,填写、勾选、计算全失效。解法:需要保留可填表单时,不要先合并——先各自填好导出,或用支持表单合并的专业工具(Acrobat)。

合并后目录 / 书签点了没反应,页内跳转也失灵?

分两种链接看。文档书签(outline)挂在文档级,逐页复制不复制它 → 合并后书签整体消失。页内跳转链接(正文里点一下跳到第 X 页)指向的是具体页面对象,跨文件复制后目标可能对不上 → 点了没反应或跳错。外部网址链接https://…)是 URI 动作,一般能保留。解法:书签靠合并后重建;重度依赖内部跳转的文档,合并前先把跳转改成不依赖绝对页号的形式。

为什么有的 PDF 一加进来就"合并失败"?

最常见是加密文件。本工具读页数时能容忍加密(只数页数),但真正合并时按标准方式加载,遇到设了打开密码 / 权限口令的文件会抛错,提示"合并失败"。解法:先用 PDF 解密移除密码和限制,再来合并。其次是文件本身损坏(下载不完整、被截断),这种任何工具都读不了,需要重新获取源文件。

合并后每页大小忽大忽小,打印出来有的顶格有的留白,能统一吗?

本工具不做尺寸归一化——每页保留它在原文件里的物理尺寸。A4 的文档拼上一份 Letter、再拼一份横版 PPT 导出,合并后就是三种页面尺寸混在一个 PDF 里。屏幕上看不明显,一打印就露馅(打印机按每页各自尺寸缩放)。解法:如果最终要打印,先把各份统一导成同一尺寸(比如都过一遍"图片转 PDF 的 A4 排版"或用 Acrobat 的页面尺寸调整),再合并。

📑 打开 PDF 合并 多个 PDF · 拖拽排序 · 本地处理

📖 同一工具的其他教程