PDF 合并、拆分与整理:完整页面管理指南

· 12分钟阅读

管理 PDF 页面是您会遇到的最常见文档任务之一。无论您是合并会计发票、将大型报告拆分为章节,还是提取特定页面与同事共享,了解如何高效操作 PDF 结构可以节省数小时的手动工作。

本综合指南涵盖从基本合并和拆分到高级批处理操作、CLI 自动化和 Python 脚本的所有内容。我们将探讨这些操作中保留的内容、比较流行工具,并演练您实际会遇到的真实场景。

目录

合并 PDF:组合多个文档

合并通过按顺序附加页面将多个 PDF 文件组合成单个文档。这对于从单独的部分创建完整报告、组合扫描文档或汇总账单期间的发票至关重要。

该过程看似简单,但不同工具处理 PDF 功能的方式不同。了解保留什么以及丢失什么对于专业文档工作流程至关重要。

合并期间保留的内容

功能 qpdf pdftk pikepdf 在线工具
页面内容 ✅ ✅ ✅ ✅
书签 ✅ ✅ ✅ 有时
内部链接 ✅ 部分 ✅ 很少
表单字段 ✅ ✅ ✅ 有时
注释 ✅ ✅ ✅ 有时
数字签名 ❌ (失效) ❌ ❌ ❌
嵌入字体 ✅ ✅ ✅ ✅
图层 (OCG) ✅ 部分 ✅ 很少

重要提示:合并时数字签名始终会失效,因为文档内容发生了变化。这是设计使然——它证明文档在签名后被修改过。如果您需要在保持签名有效性的同时组合已签名文档,请考虑使用 PDF 文件夹。

基本合并命令

# qpdf: 合并三个文件
qpdf --empty --pages file1.pdf file2.pdf file3.pdf -- merged.pdf

# pdftk: 合并多个文件
pdftk file1.pdf file2.pdf file3.pdf cat output merged.pdf

# pdftk: 使用通配符合并
pdftk *.pdf cat output combined.pdf

使用我们的 PDF 合并工具直接在浏览器中组合文件,无需安装软件。它会自动保留书签、链接和表单字段。

高级合并技术

有时您需要比简单连接更多的控制。以下是选择性合并的技术:

# 从多个文件合并特定页面范围
qpdf --empty --pages file1.pdf 1-10 file2.pdf 5-15 file3.pdf -- selective.pdf

# 合并并旋转页面
pdftk A=file1.pdf B=file2.pdf cat A1-10 B1-5east output merged.pdf

# 合并并在文档之间添加空白页
qpdf --empty --pages file1.pdf blank.pdf file2.pdf -- spaced.pdf

专业提示:合并扫描文档时,请确保所有文件在合并前具有相同的方向和 DPI。不匹配的设置会创建不一致的页面大小,看起来不专业。

拆分 PDF:分解文档

拆分将 PDF 分成多个较小的文件。这对于共享特定部分、减小电子邮件文件大小或从编译文档中分离章节至关重要。

不同的拆分策略服务于不同的目的。选择与您的工作流程需求匹配的方法。

常见拆分方法

方法 描述 示例用例 命令模式
按页面范围 提取特定页面序列 第1-10页 → file1.pdf,第11-20页 → file2.pdf qpdf input.pdf --pages . 1-10 -- output.pdf
每 N 页 拆分为等大小的块 100页文档 → 10个每个10页的文件 需要脚本
按文件大小 大小超过限制时拆分 在5 MB处拆分以用于电子邮件附件 需要自定义逻辑
按书签 在章节边界处拆分 每章成为单独的文件 pdftk input.pdf dump_data + 脚本
单页 每页作为单独的文件 100页 → 100个单独的文件 pdftk input.pdf burst

拆分命令

# pdftk: 拆分为单独的页面
pdftk input.pdf burst output page_%04d.pdf

# qpdf: 按页面范围拆分
qpdf input.pdf --pages . 1-50 -- part1.pdf
qpdf input.pdf --pages . 51-100 -- part2.pdf

# pdftk: 在特定页面拆分
pdftk input.pdf cat 1-25 output chapter1.pdf
pdftk input.pdf cat 26-50 output chapter2.pdf

试用我们的 PDF 拆分工具进行可视化页面选择和实时预览。您可以拖动选择范围并准确查看要提取的内容。

按书签拆分

对于具有适当书签结构的文档,按书签拆分可保留逻辑文档划分:

# 提取书签信息
pdftk input.pdf dump_data output metadata.txt

# 解析书签并相应拆分(需要脚本)
# 级别1的每个书签成为新文件

快速提示:拆分用于电子邮件时,目标文件小于10 MB。大多数电子邮件服务器接受最多25 MB,但较小的文件发送更快,更有可能通过企业防火墙。

提取特定页面

提取从 PDF 中提取特定页面而不修改原始文件。这是最常见的 PDF 操作——提取单页共享、从教科书中提取章节或从批次中隔离特定发票。

与拆分不同,提取侧重于精确性:获取您需要的确切页面,同时保持源完整。

基本提取

# qpdf: 提取第5页、第10-15页和第20页
qpdf input.pdf --pages . 5,10-15,20 -- extracted.pdf

# pdftk: 提取第1-3页和第7页
pdftk input.pdf cat 1-3 7 output extracted.pdf

# qpdf: 提取最后5页
qpdf input.pdf --pages . z-4-z -- last5.pdf

使用我们的 PDF 页面提取器获得带缩略图预览的可视化界面。您可以单击单个页面或按住 Shift 键单击以选择范围。

高级提取模式

复杂的提取场景需要了解页面引用语法:

# 提取所有奇数页(用于双面扫描)
pdftk input.pdf cat odd output odd_pages.pdf

# 提取每第三页
qpdf input.pdf --pages . 1,4,7,10,13,16,19 -- every_third.pdf

# 以相反顺序提取页面
pdftk input.pdf cat end-1 output reversed.pdf

专业提示:从大型 PDF 中提取页面时,原始文件大小不会按比例减少。100 MB 的 PDF 可能产生10页20 MB 的提取,因为字体和图像是完整嵌入的。之后使用 PDF 压缩来优化文件大小。

重新排序和旋转页面

重新排序在不添加或删除内容的情况下更改页面顺序。旋转修复扫描或手机照片的方向问题。这两种操作都是非破坏性的,并保留所有 PDF 功能。

重新排序页面

# qpdf: 反转整个文档
qpdf input.pdf --pages . z-1 -- reversed.pdf

# pdftk: 自定义顺序(第3页,然后第1页,然后第2页)
pdftk input.pdf cat 3 1 2 output reordered.pdf

# pdftk: 将最后一页移到前面
pdftk input.pdf cat end 1-r2 output reordered.pdf

# qpdf: 交错两个文档(用于双面扫描的奇数/偶数)
qpdf --empty --pages odd.pdf even.pdf -- collated.pdf

旋转页面

旋转以90度增量指定。不同工具使用不同的语法:

# pdftk: 将第1页顺时针旋转90度
pdftk input.pdf cat 1east 2-end output rotated.pdf

# pdftk: 将所有页面旋转180度
pdftk input.pdf cat 1-endsouth output flipped.pdf

# qpdf: 将第1-10页顺时针旋转90度
qpdf input.pdf --rotate=+90:1-10 -- rotated.pdf

# qpdf: 奇数页旋转一个方向,偶数页旋转另一个方向
qpdf input.pdf --rotate=+90:odd --rotate=-90:even -- rotated.pdf

旋转方向:

快速提示:旋转元数据不会更改实际页面内容——它只是告诉 PDF 阅读器如何显示它。一些较旧的 PDF 查看器会忽略旋转标志,因此如果您需要保证方向,请使用重新渲染页面内容的工具。

命令行工具比较

选择正确的 CLI 工具取决于您的操作系统、功能要求和性能需求。以下是最流行选项的详细比较。

工具功能矩阵

工具 许可证 速度 功能 最适合
qpdf Apache 2.0 非常快 全面,保留结构 专业工作流程、自动化
pdftk GPL 快 简单语法,表单填充 快速任务、初学者
pikepdf MPL 2.0 快 Python 库,可编程 自定义自动化、集成
PyPDF2 BSD 中等 纯 Python,无依赖 简单的 Python 脚本
Ghostscript AGPL 慢 渲染、转换、压缩 格式转换、优化

安装

# macOS
brew install qpdf pdftk-java

# Ubuntu/Debian
apt install qpdf pdftk

# Python 工具
pip install pikepdf PyPDF2

# Windows(通过 Chocolatey)
choco install qpdf pdftk

性能比较

在500页、50 MB PDF 上进行基准测试(合并操作):

对于处理数百个文件的批处理操作,qpdf 的速度优势会显著累积。

专业提示:如果您在 macOS 上且 pdftk 无法工作,您可能需要 pdftk-java。原始 pdftk 是为较旧的 macOS 版本编译的,无法在 Apple Silicon 上运行。使用 brew install pdftk-java,命令变为 pdftk-java。

Python 自动化示例

Python 通过 pikepdf 和 PyPDF2 等库提供强大的 PDF 操作。这些示例展示了您可以为工作流程调整的常见自动化模式。

使用 pikepdf 合并

import pikepdf
from pathlib import Path

def merge_pdfs(input_files, output_file):
    """合并多个 PDF 并保留所有功能。"""
    pdf = pikepdf.Pdf.new()
    
    for file in input_files:
        src = pikepdf.Pdf.open(file)
        pdf.pages.extend(src.pages)
    
    pdf.save(output_file)

# 用法
files = ['report1.pdf', 'report2.pdf', 'report3.pdf']
merge_pdfs(files, 'combined_report.pdf')

按页数拆分

import pikepdf
from pathlib import Pat