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