202510
developer-tools

pdfly:一个现代化的 Python PDF 命令行瑞士军刀

介绍 pdfly,一个基于 pypdf 的现代 Python 命令行工具,可用于合并、拆分、提取信息等日常 PDF 操作,是 pdftk 等传统工具的强大替代品。

在开发工作流和日常文档处理中,PDF 文件无处不在。然而,对于习惯使用命令行的开发者和高级用户而言,快速、批量地处理 PDF 任务(如合并报告、拆分章节、提取元数据)常常依赖于一些略显陈旧的工具,例如经典的 pdftk。尽管 pdftk 功能强大,但其安装和在不同操作系统上的兼容性有时会成为障碍。今天,我们将介绍一个更现代、基于 Python 的替代方案——pdfly,它堪称 PDF 操作的命令行瑞士军刀。

pdfly 是一个构建在著名 Python PDF 处理库 pypdf 之上的命令行工具。这意味着它继承了 pypdf 强大而稳定的核心功能,并将其封装在简单、易于记忆的命令中,让用户无需编写任何 Python 代码即可直接在终端中完成复杂的 PDF 操作。

安装与初探

作为 Python 生态系统的一员,pdfly 的安装极其简便。只需通过 pip 即可完成:

pip install pdfly

安装完成后,你可以通过 pdfly --version 来验证其是否成功安装。pdfly 的设计哲学是提供一系列清晰的子命令,分别对应不同的 PDF 操作。你可以通过 pdfly --help 查看所有支持的命令,例如 merge(合并)、split(拆分)、rotate(旋转)、info(信息查询)等。

核心功能与实用场景

让我们通过几个常见的场景,探索 pdfly 如何简化我们的工作。

1. 快速获取 PDF 信息

在处理一个陌生的 PDF 文件时,首先需要了解其基本信息,如页数、作者、标题、加密状态等。pdfly info 命令可以完美胜任此任务。

假设你有一个名为 annual-report-2024.pdf 的文件,执行以下命令:

pdfly info annual-report-2024.pdf

终端将输出该文件的详细元数据,包括创建日期、修改日期、PDF 生成器、页数以及文档是否加密。这对于编写自动化脚本前的预检查尤为重要。

2. 轻松合并多个 PDF

将多个 PDF 文件合并成一个是极为常见的需求,例如将多个部分的报告整合成一份完整的文档。使用 pdfly merge 命令,这个过程变得异常简单。

假设你有 part-1.pdf, part-2.pdf, 和 cover.pdf 三个文件,并希望将它们按指定顺序合并为 full-document.pdf

pdfly merge cover.pdf part-1.pdf part-2.pdf -o full-document.pdf

-o 参数用于指定输出文件名。pdfly 会严格按照你在命令中列出的文件顺序进行合并,逻辑清晰,不易出错。

3. 精准拆分与页面提取

有时,你可能只需要一个长篇 PDF 中的某几页,比如提取论文的某一章节或报告的附录。pdfly split 命令支持灵活的页面范围选择。

页面范围的语法非常直观:

  • 1-5: 提取第 1 到 5 页。
  • 10: 仅提取第 10 页。
  • 1, 5, 10-12: 提取第 1、5 以及 10 到 12 页。
  • 1-N: N 代表文档的最后一页,这在不知道总页数时非常方便。

例如,从 user-manual.pdf 中提取封面(第 1 页)和故障排查章节(第 35 到 40 页):

pdfly split user-manual.pdf 1 35-40 -o troubleshooting-guide.pdf

4. 旋转扫描错误的页面

扫描文档时,页面方向错误是常有的事。pdfly rotate 允许你对指定页面进行顺时针旋转。旋转角度必须是 90 度的倍数。

如果你发现 scanned-doc.pdf 的第 3 页和第 5 页颠倒了(需要旋转 180 度):

pdfly rotate scanned-doc.pdf 3 5 --rotate 180 -o corrected-doc.pdf

--rotate 参数指定旋转角度。同样,你可以使用 1-N 这样的范围来旋转整个文档。

为何选择 pdfly 而不是传统工具?

  1. 现代且活跃pdfly 依赖于持续更新的 pypdf 库,能够更好地支持新版 PDF 规范和特性,同时社区活跃,问题响应及时。
  2. 跨平台与易于安装:作为 Python 包,pdfly 在 Windows、macOS 和 Linux 上拥有一致的安装和使用体验,避免了 pdftk 在某些系统上复杂的编译或依赖问题。
  3. 脚本友好pdfly 的命令和参数设计简洁,非常适合嵌入到 Shell 脚本中,用于构建强大的文档处理自动化流程。例如,你可以编写一个脚本来自动合并每日生成的日志 PDF 并加上时间戳命名。
  4. 底层库强大pypdf 本身支持更高级的功能,如添加水印、设置密码、提取文本和图片等。虽然 pdfly 目前主要暴露了核心操作,但其潜力巨大,未来的版本可能会集成更多高级功能。

结论

pdfly 以其简洁的命令行接口、强大的功能和便捷的安装,为需要通过终端处理 PDF 文件的用户提供了一个现代化的优秀选择。它成功地将 pypdf 库的强大能力带给了更广泛的非 Python 程序员用户群。无论你是需要整理个人文档、处理工作报告,还是构建复杂的自动化工作流,pdfly 都值得你添加到自己的工具箱中,它将使你的 PDF 处理任务变得前所未有的高效与轻松。