如何拆分 PDF 并提取页面
拆分会把您选择的页面复制到新的 PDF 文件中,原文件保持不变。本指南介绍 LeedyBox 工具的两种模式、页面范围的写法、拆分后的文件加起来为何可能比原文件更大,以及发送前需要检查哪些内容。
什么时候适合拆分
- 只发送相关部分,例如一份 48 页的合同中需要签字的那两页。
- 上传表单限制了文件大小或页数。
- 拆开批量扫描的文件:一次性放进扫描仪的 30 张收据,最后都在同一个文件里。如果每张收据占一页,“提取所有页面”会为每张收据生成一个文件。
- 为其他工具准备页面:PDF 转 JPG 工具会把所有页面转换后打包成一个 ZIP,或者每次点击保存一页。因此,先从 80 页的报告中提取第 5–12 页,得到的 ZIP 里就只有 8 张图片,而不是 80 张(参见将 PDF 页面转换为 JPG 或 PNG)。
如果要调整页面顺序或删除几页,请改为参阅如何重新排序、旋转和删除 PDF 页面。
两种模式,三种结果
下载得到的内容取决于所选的标签页和选中的页数。以 report.pdf 为例:
| 模式 | 结果 | 文件名 |
|---|---|---|
| 提取自定义范围,选中一页 | 一个单页 PDF | report_page_7.pdf |
| 提取自定义范围,选中多页 | 一个包含所有选中页面的 PDF,按原顺序排列 | report_extracted.pdf |
| 提取所有页面 | 每页一个 PDF,打包在一个 ZIP 压缩包中 | report_all_pages.zip,内含 report_page_1.pdf、report_page_2.pdf … |
因此,1-3, 5, 8-10 得到的是一个 7 页的文件,而不是三个文件。如果需要把几个部分分开保存,请逐个提取:下载后文档仍保持加载状态,所以可以先输入 1-3 并下载,再输入 5 并再次下载。每次多页提取的文件都命名为 report_extracted.pdf,浏览器通常会在重复的文件名后加上编号,因此最好边下载边重命名。
操作步骤
- 打开拆分 PDF,在选择 PDF 文件或拖放到此处区域选择一个 PDF。如果一次拖入多个文件,只会使用第一个。
- 等待所有页面的缩略图绘制完成。随后,文件名、大小和页数会显示在标签页上方,所有页面初始均为选中状态。
- 在提取自定义范围中,在页面范围(例如:1-3、5、8-10)框中输入,或点击缩略图。该框一开始填的是完整范围(例如
1-40),因此请先清空它,或先点击取消全选。全选会重新选中所有页面,计数器会显示类似“已选择 7 / 40 页”的信息。 - 也可以切换到提取所有页面,此模式会忽略当前的选择。
- 点击拆分 PDF 并下载;点击更换文件可重新开始。
点击缩略图时,范围框会被改写成简洁的形式:第 2、3、4 和 9 页会变成 2-4, 9。缩略图是以低分辨率绘制的,因此请在下载的文件中核对内容。
页面范围的写法
这里的数字是页面在文件中的位置,从 1 开始,与缩略图下方标签上的编号一致。
- 各项之间用逗号分隔,范围用连字符表示。符号前后的空格不影响结果。
- 顺序和重复都不影响结果:
8-10, 1-3, 2会按原顺序得到第 1、2、3、8、9、10 页。 10-8会被视为第 8 到 10 页;在 40 页的文件中,38-45到第 40 页为止。超出最后一页的单个页码或 0 会被忽略。5-或-3这样的开放范围会被忽略;请写成5-40。- 只有普通的半角连字符(-)和半角逗号(,)才有效。从文字处理软件粘贴来的短破折号(en dash,如
1–3)或全角连字符(如1-3)只会选中第 1 页;1 3、1;3,以及用全角逗号或顿号分隔的1,3、1、3也是如此。范围框标签里的示例使用了顿号,如果照着输入1-3、5、8-10,只会选中第 1–3 页,因此请改用半角逗号:1-3, 5, 8-10。
印刷页码往往与页面位置不同。如果一份报告在第 1 页之前有封面和四页前置内容(编号 i–iv),那么印刷的第 12 页就是文件中的第 17 页(1 + 4 + 12)。下载前请检查高亮显示的缩略图。
为什么拆分后的文件加起来可能比原文件更大
在多个页面上使用的字体和图片(例如嵌入的字体或页眉徽标)在原文件中通常只存储一次,由所有页面共享。而每个新文件都需要自带一份其页面所引用的全部资源。pdf-lib 会原样复制这些资源:它不会把字体精简到复制页面上实际用到的字符,也不会删除页面资源列表中列出却并未使用的条目。因此,单独一页也可能带着为整份文档制作的字体子集;如果文件中所有页面共用同一个资源列表,单独一页还会带上该列表中的全部字体和图片。
在我们的测试中,我们用 Python 的 ReportLab 制作了一份 40 页的 A4 文字报告(以子集方式嵌入两种 DejaVu 字体,每页都有一个 900 × 240 像素的 JPEG 徽标),然后在 Node.js 中用 pdf-lib 1.17.1(即 LeedyBox 工具加载的库版本),通过相同的调用进行拆分:
| 输出 | 大小 |
|---|---|
| 原文件,40 页 | 约 151 KB |
| 每个单页 PDF | 约 86 KB |
| 全部 40 页分别存为单独文件(ZIP) | 约 3.4 MB,大约是原文件的 23 倍 |
1-3, 5, 8-10 合为一个 7 页 PDF |
约 94 KB |
类似扫描件的文件则表现不同:用 Pillow 以 1240 × 1754 像素(150 dpi)的灰度 JPEG 制作的 10 页 A4 文件约为 2.6 MB,拆成的 10 个单页文件加起来也约为 2.6 MB,因为各页之间没有共享的内容。您的结果会有所不同,但简单来说:
- 页数减少时,扫描件大致按比例变小(我们从扫描件中提取的 7 页文件约为 1.8 MB);文字文档则会因字体和共享图片而保留一个基础大小。
- 同样的页面放在一个文件中,通常比分成多个单独文件占用的空间更少。
- 本工具把 PDF 存入 ZIP 时不进行压缩,因此 ZIP 的大小与其中各文件的总和差不多。
如果文件仍然太大,请参阅如何压缩 PDF。
新文件会保留什么、丢失什么
页面是复制的,而不是重新渲染的:文字仍可选中,图片不会被重新压缩,页面尺寸和旋转方向也会保留。复制页面上的网页链接同样会保留。但属于整个文档的内容不会被复制,而有些页面功能恰恰依赖于这些内容:
- 书签和页面标签(自定义编号,例如 i、ii、iii)。
- 标题、作者和其他文档属性。新文件会把 pdf-lib 列为生成程序(Producer),并以拆分的时间作为创建日期。
- 无障碍标签,即屏幕阅读器用来识别标题和阅读顺序的结构:即使原文件带有标签,新文件也不会带有。
- 内部链接(例如目录条目)在两种情况下可能无法跳转:目标页面没有被提取,或者链接使用的是命名目标(named destination),而命名目标存储在文档级别。表单字段也可能无法再填写,因为它们所属的表单同样是在文档级别定义的。
- 数字签名不会继续有效:签名针对的是原文件的确切字节,因此即使复制的页面上仍显示着签名,也无法证明新文件的任何内容。请保留已签名的原文件。
拆分不是删除敏感页面的安全方法
我们用 pdf-lib 1.17.1 做过一项测试:从一份 6 页的 PDF 中提取第 1 页,而这份 PDF 的第 1 页有一个指向第 5 页的链接。新文件只显示一页,文本提取工具也只找到了第 1 页的文字,但第 5 页的内容却作为未使用的数据保存在文件中,任何查看文件内部结构的人都能读到。目录和交叉引用都可能以这种方式把其他页面带进来。复制的页面上隐藏的内容,例如黑框下面的文字或可见区域之外的内容,也会一并被复制。对于机密资料,请使用 PDF 编辑器的涂黑(redaction)或清理文档功能,或者发送用PDF 转 JPG生成的页面图片。图片只包含页面绘制出来的外观,不含文字层或隐藏对象,不过这样一来,文字也就无法再选中或搜索了。
常见问题与解决方法
- “……是浏览器无法读取或已损坏的 PDF 文件。”文件可能已损坏,或者需要密码才能打开;本工具没有密码输入框。如果获得许可,请在可以输入密码的应用程序中另存一份不受保护的副本。
- 缩略图能正常显示,但拆分时出现与加密有关的错误信息。提示以“拆分 PDF 文件时发生错误:”开头,后面跟着一段提到 encrypted(已加密)的英文信息。这个 PDF 无需密码即可打开,但已经加密,编辑或打印限制等权限设置就是以这种方式存储的。预览由 PDF.js 绘制,而拆分由 pdf-lib 完成;按照本工具调用 pdf-lib 的方式,它会拒绝加载加密文件。本工具不会移除或绕过这种保护。
- “请至少选择一个要提取的页面。”当前没有选中任何有效页面,例如点击了取消全选之后,或输入了开放范围。
- 提取的页面不对。检查是否有短破折号、全角符号或顿号、漏掉的逗号,或误用了印刷页码。
- 长文件处理较慢。所有缩略图绘制完成后才会出现操作控件,在此之前进度条一直停在大约五分之一处,因此长文件看起来可能像是卡住了。此外,“提取所有页面”会在内存中生成每个文件以及 ZIP 压缩包。本工具本身没有设置大小上限,但对于非常大的文件,电脑能处理,手机却可能失败。
发送文件之前
检查每个文件的页数、首页、末页和文件大小,并给它起一个能说明内容的名称,例如 contract_signature_pages.pdf。请保留原文件。如果要把各部分重新合在一起,请使用合并 PDF。如果原文件没有印刷页码,而提取出的部分需要从某个页码(比如 31)开始编号,请参阅为 PDF 添加页码。本页面会直接从 leedybox.com 加载 PDF.js、pdf-lib 和 JSZip,但您的文件是在浏览器中读取和拆分的,不会发送到 LeedyBox 服务器。
常见问题
可以每 30 页自动拆分一次 PDF 吗?
没有自动拆分的选项。请用“提取自定义范围”逐个提取各部分:一个 120 页的文件需要依次输入 1-30、31-60、61-90 和 91-120,共下载四次。
可以一次把第 1 到 3 页和第 7 页分别存成两个文件吗?
无法一步完成。“提取自定义范围”每次下载只生成一个文件,因此请先提取 1-3,再提取 7。“提取所有页面”则会把每一页都单独输出。
提取时可以改变页面顺序吗?
不可以。页面会保持原来的顺序。请用整理 PDF 页面重新排列结果。
拆分会降低质量吗?
不会。页面是用 pdf-lib 复制的,而不是重新渲染,因此文字和图片保持原样。可能丢失的是书签和页面标签等文档级内容,链接或表单字段也可能失效,详见上文。
为什么印着 23 的页面在阅读器中显示为第 1 页?
阅读器计算的是页面在新文件中的位置,而新文件没有页面标签。印刷页码是页面内容的一部分,不会改变。PDF 添加页码可以从您选择的起始页码开始印上新的页码,但它是把页码叠加在页面上,不会删除原有的印刷页码,因此适合还没有页码的页面。