“把几个 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.pdf、02.pdf),但既然本工具支持拖拽,直接拖最稳。
合并前的自检清单
- 要保留可填表单? → 别合并,或用 Acrobat
- 要保留书签 / 目录跳转? → 合并后需重建,或换专业工具
- 要打印 / 装订? → 先统一页面尺寸再合并
- 有加密文件? → 先解密
- 在意体积? → 合并后再压一次
- 顺序? → 拖拽排序,别信文件名
一句话总结
逐页复制型合并只搬”页面”,搬不走书签、表单这些文档级结构,也不跨文件去重字体(所以体积会涨)、不统一页面尺寸(所以打印会乱),加密文件要先解密——把这些当成机制而非 bug,先处理好再合并。