如何合并几个PDF文件?


Answers:


209

PDF随机播放器 安装PDF-Shuffler

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

PDF-Shuffler的屏幕截图


我尝试过-在10.04上不起作用
David Oneill

在12.04上,pdfshuffler始终抱怨“解包的值太多”,使其无法使用。
despens

8
在14.04上安装并像魅力一样工作。谢谢一大堆!
Zlatty 2014年

1
我还可以确认pdfshuffler在14.04 amd64上工作正常。
conualfy 2014年

2
同样适用于16.04.1
Sanjay Manohar

333

pdf文件安装pdftk

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

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

更多信息可在此处Way Back Machine


5
pdftk有问题-bugs.launchpad.net/ubuntu/+source/pdftk/+bug/779908。gs可能速度较慢,但​​工作效果很好[IgnitE的答案]
Pushpak Dagade

@PushpakDagade ghostscript会将注释弄乱,尤其是已选中的注释(复选框中带有选中标记的复选框)将不再具有此选中标记。我不知道如何解决此问题。另外,如果合并PDF v1.5 + 1.6,则默认情况下输出为1.4。那是奇怪的行为。
乔纳森·科马尔

2
pdftk有一个不寻常的用法,其中命令catoutput跟随可变参数输入参数,然后再跟输出参数。
杰夫·普基特

3
该软件包似乎已于2018.04中删除。
尼古拉斯·拉乌尔

1
@NicolasRaoul我刚刚以快速安装的方式下载了它。
最多

161

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您可以做很多事情。您可以阅读其文档以获取更多详细信息。

资源


2
没错,但是速度非常慢。我只是尝试串联45 x 400K单页PDF。pdftk用了0m0.484s,用gs了1m32.898s(慢了近200倍),但文件的gs大小却缩小了约21%。
艾丹,2013年

2
如果将通配符用于要合并的文件列表,则此命令也可以使用。例如,替换file1.pdf file2.pdffile*.pdf
Antonios Hadjigeorgalis,2014年

2
对我来说,gs使用一些“不符合规范”的PDF pdftk可以永久运行。
ntc2 2014年

1
使用-dPDFSETTINGS=/prepress来自质量改进的选项。感谢原始贡献者
Mohnish

6
@AntoniosHadjigeorgalis仅供参考,很好理解:这不是支持通配符的命令,这实际上是壳更换file*.pdffile1.pdf file2.pdf传递参数的命令。
Midgard

81

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

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf

12
警告:现有文件out.pdf将被覆盖而不会发出警告,因此pdfunite *.pdf将无法按预期工作。
krlmlr 2014年

1
@krlmlr您始终可以将输出放入另一个目录。
BЈовић

足够公平,cp也可以毫无警告地覆盖最后一个参数。这仅是为了吸引用户(像我自己一样)-我很幸运,我已经备份了有问题的文件...
krlmlr 2014年

1
Upvote:这是一个简单的命令行工具,没有像其他许多答案一样的单击并拖动GUI。它很好地封装了(基本等效)的GhostScript解决方案的复杂性。
Tripleee 2015年

1
这也非常快。做得好。在非常慢的服务器上(aws t1.micro),gs花费9秒,pdftk花费4秒,而pdfunite花费0.9秒来合并两个文件!
rsmoorthy

34

PDF链 安装PDF链

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


这是最好的答案。无论Ubuntu版本如何,它都能完美运行。
Paulo Coghi '02

轻松地在Ubuntu 14.04上工作!
我的account_ram

在Ubuntu 18.04上效果很好!
orschiro


@ user2413是一个快速存储,不是Ubuntu中唯一的软件源。尝试搜索apt也没有给出任何结果:/
jena


8

一种替代方法是按照本文中的说明使用Latex(假设您已安装pdflatex,则无需root访问权限):https : //tex.stackexchange.com/questions/8662/merge-two-pdf-files-output-by- 胶乳

如果您没有提到的工具或root特权,但您确实拥有pdflatex,这将很有用。

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

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

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

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


6

我使用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

也许有一种更简单的方法来应对... :-)


该过程替代是多余的,甚至可能有害。正确,简单得多的命令行是,pdfunite output_*.pdf out$(date +%Y-%m-%d-%H_%M_%S).pdf但是缺少的顺序ls -v。一个显而易见的琐碎解决方法是为文件命名,以便它们自然按照您希望包含它们的顺序排序。如果绝对需要ls -v,您至少可以输给tr,这在这里什么都不做。
Tripleee 2015年




1

这是我的方法:

  • 我希望它易于访问,所以我在Nautilus中创建了一个右键单击快捷方式(请参阅https://help.ubuntu.com/community/NautilusScriptsHowto
  • 我希望它很快,所以我使用了pdfunite
  • pdfunite仅在命令中间接受文件路径,因此我不得不抓紧头来管理文件路径中的空间。因此,我假设所有文件路径均以“ / home /”开头,以“ .pdf”结尾

结果如下:

#!/bin/sh
CLEANED_FILE_PATHS=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed 's,.pdf /home/,.pdf\\n/home/,g')
echo $CLEANED_FILE_PATHS | bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" merged.pdf'

Juste将此脚本粘贴到

/ home /您的用户名/.local/share/nautilus/scripts

并将其命名为“ merge_pdfs.sh”(例如)。然后使其可执行(右键单击merge_pdfs.sh->权限选项卡->勾选“允许将文件作为程序执行”

因此,现在要合并pdf文件,只需选择它们->右键单击->脚本-> merge_pdfs.sh,它将在同一目录中创建“ merged.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.