如何合并多个PDF文件?

Dee*_*nky 471 pdf merge

Windows 中有很多软件可以合并 PDF 文件,但是我们如何在 Ubuntu 中执行相同的操作?

Roj*_*jan 449

pdftk

要合并两个 pdf 文件,file1.pdf以及file2.pdf

pdftk file1.pdf file2.pdf cat output mergedfile.pdf
Run Code Online (Sandbox Code Playgroud)

在此处获取更多信息Way Back Machine

要安装,请运行:

sudo snap install pdftk
Run Code Online (Sandbox Code Playgroud)

  • pdftk 有问题 - https://bugs.launchpad.net/ubuntu/+source/pdftk/+bug/779908。gs 可能很慢,但工作完美 [IgnitE 的回答] (8认同)
  • 效果很好。要在 Ubuntu 20.04 LTS 上安装,请执行以下操作:`sudo apt install pdftk-java` (6认同)
  • 该软件包似乎已在 2018.04 中删除。 (5认同)
  • pdftk 有一个不寻常的用法,其中命令 `cat` 和 `output` 跟随可变参数输入参数,然后再次跟随输出参数。 (4认同)
  • 仅供参考:`sudo snap install pdftk` - aptitude 应用程序不再有候选版本,它已被创建 snap 包的作者弃用。 (3认同)
  • @NicolasRaoul 我刚刚下载了它作为快照安装。 (2认同)
  • 我遇到以下错误:错误:无法打开 PDF 文件:... (2认同)

Mar*_*erg 270

PDF-Shuffler(安装

如果您想要一个具有简单 GUI 的工具,请尝试pdfshuffler。它允许合并 PDF 以及重新排列和删除页面。对于批处理和/或更复杂的任务,pdftk 当然更强大。

PDF-Shuffler 的屏幕截图

  • 在 14.04 上安装和工作就像一个魅力。谢谢一堆!! (10认同)
  • 自 Ubuntu 20.04 起,此工具已重命名为 `pdfarranger`。你仍然可以通过 apt 安装 `pdfshuffler`,但它只是一个指向 `pdfarranger` 的空指针,这也是你在安装后需要的命令。 (6认同)
  • 也适用于 16.04.1 (2认同)
  • 在 Ubuntu 14.0 64 位上尝试过 PdfShuffler 0.6.0 (`apt-get install pdfshuffler`),它可以工作,但有一个警告 - 它在处理文件名中的一些特殊字符时遇到问题(在我的情况下,pdfshuffler 无法使用 `#` 加载文件名) ) (2认同)

ign*_*ite 222

Ghostscript是一个包(在 Ubuntu 中默认可用),它使您能够查看或打印 PostScript 和 PDF 文件为其他格式,或将这些文件转换为其他格式。
要使用 Ghostscript 合并 PDF 文件,请键入如下内容:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dAutoRotatePages=/None -sOutputFile=finished.pdf  file1.pdf file2.pdf
Run Code Online (Sandbox Code Playgroud)

以下是该命令的简要说明:

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.
Run Code Online (Sandbox Code Playgroud)

您的输入文件甚至不需要是 PDF 文件。您还可以使用 PostScript 或 EPS 文件,或三者的任意组合。

您可以使用 Ghostscript 做很多事情。您可以阅读其文档以获取更多详细信息。

来源

  • @AntoniosHadjigeorgalis 仅供参考和很好的理解:这不是支持通配符的命令,实际上是外壳在将参数传递给命令之前用 `file1.pdf file2.pdf` 替换了 `file*.pdf`。 (11认同)
  • 如果您对要组合的文件列表使用通配符,则此命令也有效。例如,将 `file1.pdf file2.pdf` 替换为 `file*.pdf` (5认同)
  • 我使用“gs”在不到飞秒的时间内将大约 20 个小 pdf 合并到一个文件中。无需下载 70MB 的 `pdftk`。谢谢@ignite! (4认同)
  • 是的,但它*慢得令人难以置信*。我只是尝试连接 45 x 400K 的单页 PDF。`pdftk` 需要 0m0.484s,`gs` 需要 1m32.898s(几乎慢了 200 倍)来自 `gs` 的文件小了大约 21%。 (3认同)
  • 对我来说,`gs` 与一些“不符合”的 PDF 一起工作,其中 `pdftk` 将永远运行。 (2认同)
  • 这对我来说在 Ubuntu 16.04 上运行良好,无需额外下载。合并 4 个页面几乎是瞬间完成的。 (2认同)

BЈо*_*вић 132

您还可以使用 pdfunite 来合并 pdf 文档:

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
Run Code Online (Sandbox Code Playgroud)

要安装(pdfunite如果尚未安装),请运行:

sudo apt-get install poppler-utils
Run Code Online (Sandbox Code Playgroud)

  • 警告:现有文件`out.pdf` 将在没有警告的情况下被覆盖,因此`pdfunite *.pdf` 将无法按预期工作。 (17认同)
  • @krlmlr 您始终可以将输出放入另一个目录。 (2认同)
  • 赞成:这是一个简单的命令行工具,没有像这里的许多其他答案那样的点击和流口水的 GUI。它很好地封装了(基本上等效的)GhostScript 解决方案的复杂性。 (2认同)
  • 这也非常快。工作做得很好。在非常慢的服务器(aws t1.micro)上,gs 需要 9 秒,pdftk 需要 4 秒,而这个 pdfunite 需要 0.9 秒来合并两个文件! (2认同)

Vin*_*nzo 37

PDF链 安装 PDF 链

一个非常好的解决方案是 PDFChain。它的 GUI 是 PDFTK 的前端,您可以在其中合并、拆分甚至向 PDF 文件添加一些背景。


小智 16

另一种方法是使用本文中解释的 Latex(假设您安装了pdflatex没有 root 访问权限):https : //tex.stackexchange.com/questions/8662/merge-two-pdf-files-output-by-乳胶

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

我复制下面的 tex 代码以合并file1.pdffile2.pdf. 创建一个名为output.tex并放置的文件:

\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-]{file1}
\includepdf[pages=-]{file2}
\end{document}
Run Code Online (Sandbox Code Playgroud)

要编译,只需使用: pdflatex output.tex

合并后的文件将命名为output.pdf.


Det*_*mnu 13

试试 PDFMod,它来自 GNOME 项目:

https://wiki.gnome.org/Apps/PdfMod

sudo apt install pdfmod
Run Code Online (Sandbox Code Playgroud)


小智 9

使用 pdfsam http://www.pdfsam.org/它非常适合拆分和合并 pdf

sudo apt install pdfsam
Run Code Online (Sandbox Code Playgroud)


xer*_*mus 8

我使用 pdfseparate 从大 pdf 文件中提取特定页面:

pdfseparate -f  156 -l 157 input.pdf  output_%d.pdf 
pdfseparate -f  1   -l 2   input.pdf  output_%d.pdf 
Run Code Online (Sandbox Code Playgroud)

然后我通过命令加入他们:

pdfunite $(ls -v output_*.pdf | tr '\n' ' ') out$(date  +%Y-%m-%d_%H_%M_%S ).pdf
Run Code Online (Sandbox Code Playgroud)

这加入:

output_1.pdf output_2.pdf output_156.pdf output_157.pdf  
Run Code Online (Sandbox Code Playgroud)

进入:

out2014-12-14_23_25_36.pdf
Run Code Online (Sandbox Code Playgroud)

可能有更简单的方法来应对... :-)

安装说明:

sudo apt install poppler-utils
Run Code Online (Sandbox Code Playgroud)

  • 进程替换是多余的并且[甚至可能有害](http://mywiki.wooledge.org/ParsingLs)。正确且简单得多的命令行是“pdfunite output_*.pdf out$(date +%Y-%m-%d-%H_%M_%S).pdf”,但它缺少“ls -v”的顺序。一个明显而简单的修复方法是命名您的文件,以便它们自然地按照您想要包含它们的顺序排序。如果你绝对想要“ls -v”,你至少可以把管道丢给“tr”,这在这里没有任何作用。 (2认同)

jos*_*chi 5

一般可以使用pdftk来合并和修改PDF文档。或者,有一个在线服务可以做到这一点:http : //www.pdfmerge.com/


fra*_*ous 5

您还可以使用jPDFTweakpdfsampdfjam

(也就是说,我使用 pdftk。)