如何使用命令行合并多个PDF?


51

是否有一种快速的一线功能将多个pdf合并为一个?

我知道可以使用Preview.app来完成

Answers:


73

在通过命令行在OS X中结合PDF文件中的“在OSX的命令行中结合PDF文件”中查找。

事实证明,从Tiger起,OSX附带了完全满足您需要的Python脚本。该脚本已经可以执行,并且Python已预安装在OS X上,因此运行该脚本所需要做的就是打开终端并输入

"/System/Library/Automator/Combine PDF Pages.action/Contents/Resources/join.py" -o PATH/TO/YOUR/MERGED/FILE.pdf /PATH/TO/ORIGINAL/1.pdf /PATH/TO/ANOTHER/2.pdf /PATH/TO/A/WHOLE/DIR/*.pdf

此外,在链接页面上,它建议为join.py文件建立符号链接以使键入变得更容易,但是他们省略了-sin ln -s ... ...,如果没有,则会创建硬链接。可能无关紧要,尽管我提到过。


为我工作。这里的一件好事是避免必须安装您可能永远不会再使用的额外软件包。谢谢。
gvrocha

为我制作了El Capitan 10.11.6。
pabuisson

2
警告:我有PDF,它弄乱了几页的旋转
adius

27

只需使用Brew通过以下命令安装Ghostscript:

brew install gs

然后使用列出的所有文件运行命令:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=merged.pdf source1.pdf source2.pdf source3.pdf

OS X / macOS本来已经可以从命令行中组合PDF文件,所以为什么要浪费时间先安装Xcode,Homebrew和Ghostscript的命令行工具,然后再做一些本来可以做的事情安装任何上述软件包?
user3439894

5
@ user3439894很多人已经安装了这些通用软件包,并且已经在使用它们,gs因此该解决方案将同样方便,以供将来参考。
htor

1
@ user3439894我看到了困惑。我之所以这么称呼您,是因为您对这个答案的价值提出了质疑。如今,使用自制软件安装命令行实用程序非常普遍,因此我不会称其为浪费时间。对于许多人来说,这个答案提供了与您同样好的解决方案。
htor

7
这对我
有用

2
根据Thieme Hennis的评论,join.py脚本在High Sierra中因分段错误而崩溃。但是gs可以正常工作。
arcdale

2

Apple的Automator动作中的python脚本非常慢,因为它使用CoreGraphics的CGPDFDocument API,而不是较新的PDFKit框架。它还导入整个CoreGraphics库,而不只是所需的API。

另一种更快的python脚本可以在这里找到:

该脚本还向PDF添加了目录,列出了每个组件文件(并合并了现有的ToC),而Apple没有。

可以在命令行(以PDF文件名作为参数)上使用它,也可以在Automator Shell脚本操作中使用它来为Finder进行快速操作/服务。


1
作为测试,结合使用time 命令joinpdfs.py 脚本,内置join.py 脚本以及两个文件(每个文件约200 MB),您的joinpdfs.py 脚本比内置join.py 脚本快9秒,当然,完整的TOC的好处是。真好!+1
user3439894

顺便说一句,9秒听起来可能并不多,但它是内置脚本的总时间的1/3,因此快1/3的时间非常重要。
user3439894

1

FWIW,我编写了一个快速的小程序,无需依赖系统python之类的外部依赖项就可以执行此操作。在github上的此处:pdfmerge且使用起来非常简单,既可以向其传递要合并的PDF文件列表,也可以向其pdfmerge in1.pdf in2.pdf ... out.pdf传递要合并到文本文件中的文件列表,例如pdfmerge infileslist.txt out.pdf,也可以按ABC顺序执行当前目录pdfmerge out.pdf。我把它写为一个学习项目,它免费开放,您可以从github的releases选项卡中获取最新的二进制文件。


由于默认情况下Python是安装在macOS中并作为macOS的一部分安装的,因此我不一定认为它本身是外部依赖项。换句话说,要使用macOS中可用的现成功能来连接PDF文件,join.pyAutomator中“合并PDF页面”操作中的脚本,无需下载或安装其他任何东西,但要使用您的我就必须下载并安装。在链接上也没有看到二进制文件。
user3439894

1
顺便说一句,我确实仔细阅读了您的代码,有趣的是您正在使用python脚本也已经使用的两个核心组件(Foundation和Quartz)。您的代码中是否有任何本质上比默认情况下更好的方法,而不需要下载任何内容,从而可以更好地控制它的使用,而对于您的代码,则必须采取额外的额外步骤来使用它?
user3439894

1
对于不使用Python进行其他操作的人,使用Apple提供的脚本可能更有意义。但是对于使用Python的人来说,使用不同的模块安装和内容来管理多个版本(系统Python是2.7,现代Python是3.x)可能是一个大麻烦。例如,在我的机器上,$ PATH指向一个完全不同的Python。可以通过明智地使用shebang等来解决此问题,但我感到很烦。YMMV,当然。另外,直接链接到二进制下载页面:github.com/paultopia/pdfmerge/releases/latest
Paul Gowder


0

我发现免费的Coherent PDF命令行工具是最好的选择。它非常快速,无损,并且不会像其他解决方案那样弄乱方向或超链接。格式为:

cpdf file1.pdf file2.pdf -o output.pdf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.