如何合并多个PDF文件?

在Windows中有很多合并PDF文件的软件,但是在Ubuntu中我们如何做到同样的操作呢?


我找到了这个链接 - Grijesh Chauhan
14个回答

pdftk

要合并两个pdf文件,file1.pdffile2.pdf

pdftk file1.pdf file2.pdf cat output mergedfile.pdf

更多信息请点击这里Way Back Machine

安装方法如下:

sudo snap install pdftk

13pdftk有一些bug - https://bugs.launchpad.net/ubuntu/+source/pdftk/+bug/779908。gs可能会慢一些,但完美地完成了工作 [IgnitE的答案]。 - Pushpak Dagade
@PushpakDagade ghostscript在注释方面存在问题,特别是已经被检查过的注释(勾选了复选框),将不再显示这个勾选标记。我不知道有什么解决办法。另外,如果合并PDF v1.5 + 1.6,输出默认会变成1.4版本。这是一种奇怪的行为。 - Jonathan Komar
这真是太美了。在14.04.5 LTS上运行得非常好,我们可以合并具有不同页面大小/方向的PDF文件。生成高质量且文件大小较小的文件。谢谢! - Geppettvs D'Constanzo
4pdftk的用法有些不寻常,其中命令catoutput在可变输入参数之后,并再次跟随一个输出参数。 - Jeff Puckett
8包裹似乎在2018年4月被移除了。 - Nicolas Raoul
2@NicolasRaoul 我刚刚以snap安装的方式下载了它。 - Max
3FYI:sudo snap install pdftk - aptitude应用程序不再有发布候选版本,它已被作者弃用,而创建了snap包。 - GrayedFox
@GrayedFox 在18.04中 - cipricus
@NicolasRaoul 在18.04中 - cipricus
@NicolasRaoul 在该网站上,pdftk-smoser 被标记为过时。 - Flimm
一个方便的快捷方式:pdftk file* cat output mergedfile.pdf - Nir
1好工具。在我的Ubuntu 18.04 LTS上运行得非常顺畅。 - zugzug
5它的效果非常好。在Ubuntu 20.04 LTS上安装的方法是:sudo apt install pdftk-java - michael
jdk是过度杀伤力,不应该是必需的。 - Timo
2我遇到了以下错误:错误:无法打开PDF文件:... - desmond13
我觉得不需要“猫”。 - Timo
1在Ubuntu 20.04中可以使用sudo snap install pdftk命令进行安装,而pdftk接受"*.pdf"作为有效的参数。 - Celal Ergün
请点击此链接查看如何在Ubuntu 18.04及更高版本中安装pdftk:https://askubuntu.com/questions/1028522/how-can-i-install-pdftk-in-ubuntu-18-04-and-later。它以`pdftk-java`的形式存在,并且可以使用`pdftk`命令来操作。 - qwr
如果文件名中有空格,pdftk 将无法正常工作。 - CJ7
Snap不再必要了:sudo apt install pdftk - Reynadan

PDF Arranger(安装),以前被称为PDF-Shuffler。
如果你想要一个简单的图形用户界面工具,试试pdfarranger。它允许合并PDF文件,以及重新排列和删除页面。对于批处理和/或更复杂的任务,当然可以使用pdftk来获得更强大的功能。

Screenshot of PDF-Shuffler


我尝试过这个 - 在10.04上没有成功。 - David Oneill
在12.04版本中,pdfshuffler经常抱怨有"太多的值需要解包",导致无法使用。 - despens
对我来说,在12.04 64位系统下,pdfshuffler版本0.6.0可以正常运行。 - user1251007
10安装和使用在14.04上非常顺利。非常感谢! - Zlatty
我以前用pdftk来实现这个功能。感谢PDF Shuffle的参考,它看起来非常流畅。 - csgeek
1我也可以确认pdfshuffler在14.04 amd64上运行良好。 - conualfy
这是最快和最简单的解决方案。谢谢!(Ubuntu 14.04 64位) - The Unknown Dev
这在许多情况下都很有效,但我注意到它会去掉超链接。使用pdftk不会去掉超链接。因此,如果您要合并的PDF文件存在任何复杂性,我建议使用命令行工具;至少要对输出文件进行彻底测试。 - revnoah
只试了一个案例,但是出现了一个错误:"词典中有多个定义",所以无法生成输出。他们对此问题的跟踪已经开放了相当长的时间,但没有解决方案,所以我认为这个项目不太活跃,不建议使用! - SCBuergel
2在16.04.1上也非常出色。 - Sanjay Manohar
试了一下,在17.04上运行得很好。对于基本的合并操作非常容易使用。 - COil
这对于合并加密的记录不起作用。 - Ruthvik Vaila
2在Ubuntu 14.0 64位系统上尝试了PdfShuffler 0.6.0(通过apt-get install pdfshuffler安装),它能正常工作,但有一个小问题 - 在文件名中包含一些特殊字符时会出现问题(例如我的情况是pdfshuffler无法加载带有“#”的文件名)。 - Tzunghsing David Wong
版本0.6.0在18.04上运行得非常顺利。 - Bas Swinckels
在18.04上运行得非常出色。 - Topera
刚在19.10上使用了它,合并和裁剪了一系列的PDF文件,效果非常好。 - Will59
12从Ubuntu 20.04开始,此工具已更名为pdfarranger。您仍然可以通过apt安装pdfshuffler,但它只是指向pdfarranger的空指针,安装后您需要使用pdfarranger命令来操作。 - Carl Zulauf
这在Ubuntu 16.04上崩溃了。我已经尝试过pdftk,但它不是基于图形界面的应用程序。 - Gireesh
@CarlZulauf,你能提供一个链接,展示pdfarranger更名的文件吗?我在apt中没有看到任何证据,并且无法让pdfshuffler正常工作。 - topher217
@topher217 APT会告诉你pdfshuffler其实就是pdfarranger。在Ubuntu 20.04上尝试运行$ apt show pdfshuffler并仔细查看。 - Carl Zulauf
@CarlZulauf也许你或者我手动添加了一个apt仓库到pdfshuffler?我没有看到任何东西。这是apt show pdfshuffler输出的pastebin链接。这是在运行sudo apt update之后的情况。我使用的是Ubuntu 20.04,apt -v返回apt 1.6.14 (amd64)。关于pdfarranger,我找到的唯一文档是github仓库,但似乎没有提供任何基于apt的安装说明,而是通过pip。 - topher217
在Ubuntu 22.04上也能很好地运行! - anoopjohn

Ghostscript是一个软件包(在Ubuntu中默认可用),它使您能够查看或打印PostScript和PDF文件,并将其转换为其他格式,或者将这些文件转换为其他格式。
要使用Ghostscript合并PDF文件,请输入类似以下内容的命令:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dAutoRotatePages=/None -sOutputFile=finished.pdf  file1.pdf file2.pdf

这里是命令的简要说明:
gs         starts the Ghostscript program.
-dBATCH    once Ghostscript processes the PDF files, it should exit.
           If you don't include this option, Ghostscript will just keep running.
-dNOPAUSE  forces Ghostscript to process each page without pausing for user interaction.
-q         stops Ghostscript from displaying messages while it works
-sDEVICE=pdfwrite 
           tells Ghostscript to use its built-in PDF writer to process the files.
-sOutputFile=finished.pdf
           tells Ghostscript to save the combined PDF file with the specified name.
-dAutoRotatePages=/None
           Acrobat Distiller parameter AutoRotatePages controls the automatic orientation selection algorithm: For instance: -dAutoRotatePages=/None or /All or /PageByPage.

您的输入文件甚至不需要是PDF文件。您还可以使用PostScript或EPS文件,或者任意这三者的混合。
Ghostscript可以做很多事情。您可以阅读其文档以获取更多详细信息。 来源

3没错,但是速度真的非常慢。我刚刚尝试合并了45个大小为400K的单页PDF文件。使用pdftk只花了0m0.484s,而使用gs则需要1m32.898s(几乎慢了200倍)。不过,使用gs生成的文件大小要小约21%。 - aidan
7这个命令也适用于使用通配符来合并文件列表。例如,将file1.pdf file2.pdf替换为file*.pdf - Antonios Hadjigeorgalis
2对我来说,gs在一些“不符合规范”的PDF文件上起作用,而pdftk则会无限运行。 - ntc2
这对我的需求来说完美无缺! - dsh
1使用-dPDFSETTINGS=/prepress选项来提高质量。感谢原始贡献者的一切帮助。 - Mohnish
14@AntoniosHadjigeorgalis 只是为了参考和更好地理解:这并不是支持通配符的命令,实际上是在传递参数给命令之前,shell将file*.pdf替换为file1.pdf file2.pdf - Midgard
4我用gs将大约20个小pdf文件合并成一个单一的文件,只需不到一飞秒的时间。无需下载70MB的pdftk。感谢@ignite! - Campa
+1 也可以处理加密的PDF文件(这些令人讨厌的文件只能在有密码的情况下查看,无法合并)。 - Sir_FZ
2这在我的Ubuntu 16.04上运行得很好,无需额外下载。合并4页几乎是瞬间完成的。 - Paolo Mioni
@aidan听起来gs重新渲染文件而不仅仅是复制内容。如果你想要一种类似于蒸馏器的工作流程,这可能是件好事。 - Thorbjørn Ravn Andersen
1gs方法会破坏由pdflatex创建的PDF中的href和URL链接。pdfshuffler可以保留链接。 - HD189733b
我正在使用这个工具来连接三个文件,但是 gs 无故将其中一个文件的标题作为新文档的标题(在 PDF 查看器的标题栏中显示)。我想知道是否可以明确指定新标题。 - MWB
这个命令可以实现:gs -dBATCH -sDEVICE=pdfwrite -sOutputFile=finished.pdf file1.pdf file2.pdf,不需要使用 -q-dnopause 这两个参数,它们并不能帮助更加静默地输出。也不需要使用 dAutoRotatePages 参数。 - Timo
工作得非常好,我使用了gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dAutoRotatePages=/None -sOutputFile=finished.pdf *(带通配符)。太棒了,而且是开源的。谢谢! - Giovanni Bassi

你还可以使用pdfunite来合并PDF文档。
pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf

如果尚未安装pdfunite,请运行以下命令进行安装:
sudo apt-get install poppler-utils

20警告:现有的文件 out.pdf 将会在没有警告的情况下被覆盖,因此 pdfunite *.pdf 的预期效果将无法实现。 - krlmlr
2@krlmlr 你可以随时将输出放入另一个目录中。 - BЈовић
1好吧,cp 命令也会在没有警告的情况下覆盖最后一个参数。这只是为了急于使用的用户(比如我自己)而设定的——幸运的是,我有被影响文件的备份... - krlmlr
2点赞:这是一个简单的命令行工具,没有像其他答案中的许多点击和拖放图形界面那样。它很好地封装了(在很大程度上等效的)GhostScript解决方案的复杂性。 - tripleee
2这也非常快。工作做得很好。在一个非常慢的服务器上(aws t1.micro),gs 花费 9 秒,pdftk 花费 4 秒,而这个 pdfunite 只需要 0.9 秒来合并两个文件! - rsmoorthy
1这也可以在Cygwin下使用。 - user643722
1要在Ubuntu 16.04上安装这个,运行sudo apt-get install poppler-utils。然后你就可以输入pdfunite --help来查看它是否已安装。 - Volomike
1有趣的是,在Ubuntu MATE 20.04中,默认就安装了pdfunite。(我肯定没有自己安装它...) - Frank N
1床单被退回时尺寸不一致。 - user140259

PDF Chain 安装PDF Chain

一个非常好的解决方案是PDFChain。它的图形用户界面是PDFTK的前端,您可以合并、拆分甚至为您的PDF文件添加一些背景。


这是最好的答案。它完美地运行,无论Ubuntu版本如何。 - Paulo Coghi
在Ubuntu 14.04上毫不费力地工作! - my account_ram
在Ubuntu 18.04上运行得很好! - orschiro
1非常好,以至于在Ubuntu 18.04中被移除了(!?)。 - user2413
@user2413 这是一个Snap Store,而不是Ubuntu上软件的唯一来源。尝试在apt中搜索也没有任何结果 :/ - jena
1这在新的Ubuntu版本中如何安装? - Flimm

另一种方法是使用Latex,如本帖所述(无需root访问权限,假设您已安装pdflatex): https://tex.stackexchange.com/questions/8662/merge-two-pdf-files-output-by-latex

如果您没有提到的工具或root权限,但您有pdflatex,这将非常有用。

我将下面的tex代码复制到合并file1.pdffile2.pdf的文件中。创建一个名为output.tex的文件,并输入以下内容:

\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-]{file1}
\includepdf[pages=-]{file2}
\end{document}

编译时,只需使用以下命令:pdflatex output.tex 合并后的文件将被命名为output.pdf

这是最好的方法,因为结果总是会在那里,没有任何错误。 - Billal Begueradj
1这会破坏超链接。 - undefined


不进行合并。返回仅翻译的文本。 - user2413
1过去它曾经合并文件,现在却只是崩溃。我改用了PDFShuffler,效果非常好。 - jena

使用pdfsam http://www.pdfsam.org/ 这个工具非常适合拆分和合并pdf文件。
sudo apt install pdfsam

在19.10版本下使用它来合并文件:界面简单,选项不多,功能非常好。但是像裁剪这样的其他特性是高级选项。sudo apt-get install pdfshuffler就解决了问题 :-) - Will59

我使用pdfseparate从大的pdf文件中提取特定页面。
pdfseparate -f  156 -l 157 input.pdf  output_%d.pdf 
pdfseparate -f  1   -l 2   input.pdf  output_%d.pdf 

然后我通过命令将它们全部连接起来。
pdfunite $(ls -v output_*.pdf | tr '\n' ' ') out$(date  +%Y-%m-%d_%H_%M_%S ).pdf

这个加入:

output_1.pdf output_2.pdf output_156.pdf output_157.pdf  

转换为:

out2014-12-14_23_25_36.pdf

也许有更简单的方法来应对... :-)
安装说明:
sudo apt install poppler-utils

2进程替代是多余的,甚至可能有害。一个正确且简单的命令行是pdfunite output_*.pdf out$(date +%Y-%m-%d-%H_%M_%S).pdf,但它缺少ls -v的排序功能。一个明显而微不足道的修复方法是将文件命名为按照你想要包含它们的顺序自然排序。如果你非常需要ls -v,至少可以去掉对tr的管道操作,因为在这里它没有任何作用。 - tripleee


1最好的情况是这些回答分开,这样它们可以单独被点赞和编辑。 - Flimm