为什么文件不用上传
大多数“合并 PDF”网站的做法是把你的文档上传到它们的服务器,拼起来再把结果发回来。如果你手上只有一个网站加一台服务器,那确实是唯一能合并的办法。但如果你有一个浏览器,就不是了:现代浏览器能解析 PDF 结构并在内存里重建文档,这里用的 PDF 库(pdf-lib,MIT 许可)就是在你的标签页里干这件事。
所以这个页面没有上传步骤。你可以自己验证:打开网络面板,合并几个文件,看除了页面本身什么都不会发出去。实际后果:
- 没有页数限制、没有文件数限制、没有每日配额。服务端工具要限你,是因为每一次合并都要花它们的带宽和 CPU。你这边免费且不限量。
- 机密文档保持机密。合同、发票、病历、证件扫描件、报税单 —— 这些正是大家会去合并的文档,也恰恰是你不该交到一个免费网站手上的那些。
- 没有水印,也没有“注册才能下载”。这里没有任何靠劣化你的输出结果来赚钱的商业模式。
- 页面加载完之后可离线使用。
合并到底做了什么
PDF 是一组带编号的对象加一份索引:页面树、字体、图像、大纲和元数据。合并就是把每个源文档里的页面对象复制进一个新文档,再重建这份索引。微妙之处在于交叉引用:两个文档可能碰巧用同一个对象编号表示不同的东西,忽略这一点的合并器会做出一个页面引用错字体或错图像的文件。
这个工具把活交给库来做,由它正确地重写对象表。有两个后果值得知道:输出的是一个新文档,所以源文件里的交互式表单字段、书签和数字签名不会有意义地保留下来 —— 签名覆盖的是它签署时那段确切的字节,任何改动都会让它失效。如果你需要已签名的文档保持可验证的签名,就绕着签名合并周边的附件,别穿过签名去合并。
受密码保护的文件
加密的 PDF 没有用户密码就读不了,而浏览器工具也没法安全地向你索要密码 —— 你输入的任何东西都会被页面 JavaScript 处理。这个工具会检测到加密,然后用一条清楚的提示跳过该文件,而不是默默失败或假装合并成功了。先用你信任的桌面阅读器解密,再来合并。
文档的元数据会怎样
值得知道,因为它有利有弊:合并后的文件是一个新文档,所以它不会继承源文件的元数据。它们的标题、作者、生成软件和原始创建日期都不会带过来 —— 只有页面本身。这是靠实测验证而非假设的:在源文件里嵌入一个作者和一个标题,在这里合并,输出里这两个字符串都不会出现。
对大多数人来说这正是想要的方向:你不会把同事的名字或客户文件的内部文档标题发布出去。如果你确实需要保留原始元数据,就用桌面工具合并并保留原件,因为这个页面是刻意构建一个干净的文档。
顺序和页码范围
页面按列表顺序输出,每个文件的全部页面都会被插入。如果你需要精细控制 —— 比如把一个文档的第 3 页插到另一个文档的第 7 和第 8 页之间 —— 先用拆分与抽取切出你想要的页范围,再在这里按顺序合并那些片段。两个工具都在本地运行,所以中间文件也从不离开你的设备。