没人是因为合并 PDF 本身难才去合并的。真正的原因是邮件、打印店和上传后台都只收一个文件,而素材是散的:一份签好的合同加两个附件、在一处写的正文配另一处导出的图表、十二页属于同一份报告的扫描件。麻烦之处在于,PDF 被设计成一个自包含的文档格式,而不是一个可以首尾相接的页容器,这也正是这件事常常发生在第三方站点而不是浏览器标签页里的原因。要合并的文件恰恰是人们最不愿意上传的那类:草稿合集、银行流水、签署过的协议。下面这一条指向 iLovePDF 的合并页,这篇文章要讲的是合并对一个文件到底做了什么,以及什么时候你不该把文档交给别人的服务器。
为什么不能把两个文件直接拼起来
PDF 是个容器:文件头、一组带编号的对象、一张交叉引用表(或流)说明每个对象在哪个偏移、还有一个 trailer 指向根目录。每个文件都有自己的编号、自己的偏移和自己的 trailer。硬拼的结果是两页文档用订书钉订在一起,配着两套对象表和两棵页树。有些阅读器宽容一点能渲染出来,另一些直接报文件损坏,Acrobat 会弹出修复提示,通常能修好,但出来的文件已经很乱。这就是为什么合并不像图片压缩那样能在浏览器本地完成:做好它需要重新编号对象、重建页树,真正靠谱的工具是 qpdf、pdftk、PDFsam,或 macOS 预览里的页面合并功能。Ghostscript 也能在命令行里修复坏文件。
合并之后什么留下、什么悄悄消失
页面内容会留下:文字、图片、内嵌字体,以及每个源文件各自的页面尺寸,所以合并后的文件里出现大小不一的页面是正常的。真正出意外的是叠在页面之上的东西。文档书签通常只取第一个文件的目录结构,指向后面文档的链接会消失;交互式表单字段常被压平成当前值——作为存档没问题,要让别人还能填就完全没用;批注和注释往往被丢掉,带标签的 PDF 无障碍结构也可能丢失,如果合并结果需要满足无障碍要求,这会是真问题。数字签名必然失效,而且没有程度之分:签名覆盖的是特定的字节范围,合并会重写整个字节布局。所以顺序是:先合并,最后签名。
顺序和封面怎么处理才对
顺序是最容易搞砸的一环,把文件拖成合理顺序总比事后回忆哪一份是封面容易。有两个习惯值得养成:封面和目录单独做成一个 PDF 放在最前面合并进来,而不是在拼好之后再去编辑成品;页幅规格要在动手前就定好——A4 和 Letter 混排在技术上没问题,打印出来却很难看,如果文件是要印的,先统一页幅或让所有源文件用同一种页幅导出。另外,如果页面其实是扫描图而不是真正的文字,那么体积就等于图片的体积,此时先压缩源图片再合并,通常比事后压缩合并结果更有效。
常见问题
合并 PDF 免费吗?
本页链接的服务确实有可用的免费额度,并且会对单次任务和每小时用量设上限,这些数字会随时间调整,请以对方页面上的当前说明为准。批量用户通常被引导去注册账号或使用桌面版,这也是这类服务正常的运转方式。
我的 PDF 会被上传到服务器吗?
会。这是外链工具诚实的取舍:文件会被发给服务方,由他们的软件处理,因此适用他们的隐私政策和数据留存规则。如果文档涉及机密、涉及签署或受数据处理协议约束,请改在本地合并,qpdf 和 pdftk 都是免费的命令行工具,同一套活儿完全不用联网。
书签、表单域和批注会保留吗?
通常不会。目录一般只取第一个文档的,表单域常被压平成当前值,批注和注释经常被丢弃;页面内容、图片和字体会保留。如果合并后的文件还需要有人填写,或者还需要签名,请先合并、后签名。
为什么合并后的文件打开时提示修复?
这通常说明源文件本来就损坏,或者合并出的结构比较挑阅读器。先把每个输入文件单独打开,用 Ghostscript 或阅读器自带的修复功能处理一遍,再合并修复后的副本。合并一个已经坏掉的文件,只会让问题更难查。