There are a lot of software in Windows to merge PDF files but how can we do the same in Ubuntu?
If you want a tool with a simple GUI, try pdfshuffler. It allows for merging of PDFs as well as rearranging and deleting pages. For batch processing and/or more complicated tasks, pdftk is of course more powerful.
-
-
On 12.04, pdfshuffler always complains that there are "too many values to unpack", making it unusable. – despens Apr 12 '13 at 12:15
-
8
-
1
-
2
To merge two pdf files, file1.pdf
and file2.pdf
:
pdftk file1.pdf file2.pdf cat output mergedfile.pdf
More info available hereWay Back Machine.
-
4pdftk is buggy - bugs.launchpad.net/ubuntu/+source/pdftk/+bug/779908. gs might be slow, but does the work perfectly [IgnitE's answer] – Pushpak Dagade Apr 3 '13 at 11:05
-
@PushpakDagade ghostscript messes up with annotations, particularly comments that have been checked (check box ticked with checkmark), will no longer have this checkmark. I am not aware of a way around this. Also, if you merge PDF v1.5 + 1.6, output will be 1.4 by default. That is strange behavior. – Jonathan Komar May 19 '16 at 14:12
-
This is beautiful. Working pretty fine on 14.04.5 LTS and we can merge PDF's with different page size/orientation. Produces high quality and low size files. Thank you! – Geppettvs D'Constanzo Sep 3 '17 at 20:22
-
2pdftk has an unusual usage where commands
cat
andoutput
follow variadic input arguments and followed again by an output argument. – Jeff Puckett Nov 7 '17 at 3:47 -
2
Ghostscript is a package (available by default in Ubuntu) that enables you to view or print PostScript and PDF files to other formats, or to convert those files to other formats.
To use Ghostscript to combine PDF files, type something like the following:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dAutoRotatePages=/None -sOutputFile=finished.pdf file1.pdf file2.pdf
Here is a brief explanation of the command:
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.
Your input files don't even need to be PDF files. You can also use PostScript or EPS files, or any mixture of the three.
There is a lot you can do with Ghostscript. You can read its documentation for more details.
-
2True, but it's incredibly slow. I just tried concatenating 45 x 400K, single-page PDFs.
pdftk
took 0m0.484s,gs
took 1m32.898s (that's almost 200x slower) The file fromgs
was about 21% smaller though. – aidan Mar 22 '13 at 6:47 -
1this command also works if you use a wildcard for the list of files to be combined. for example, replace
file1.pdf file2.pdf
withfile*.pdf
– Antonios Hadjigeorgalis May 29 '14 at 13:58 -
2For me
gs
worked with some "non conformant" PDFs wherepdftk
would just run forever. – ntc2 Dec 9 '14 at 4:37 -
-
6@AntoniosHadjigeorgalis Just for reference and good understanding: that's not the command supporting wildcards, that's actually the shell replacing
file*.pdf
withfile1.pdf file2.pdf
before passing the arguments to the command. – Midgard Jun 15 '16 at 10:15
You also also use pdfunite to merge pdf documents :
pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf
-
9WARNING: An existing file
out.pdf
will be overwritten without warning, sopdfunite *.pdf
won't work as expected. – krlmlr Dec 4 '14 at 15:02 -
1
-
Fair enough,
cp
also overwrites last argument without warning. This is just for rushing users (like myself) -- I was lucky I had a backup of the file in question... – krlmlr Dec 4 '14 at 15:08 -
1Upvote: This is a simple command-line tool without a click-and-drool GUI like many of the other answers here. It nicely encapsulates the complexities of the (largely equivalent) GhostScript solution. – tripleee Apr 13 '15 at 14:28
-
1This is also very fast. Does the job well. On a very slow server (aws t1.micro), gs takes 9 secs, pdftk takes 4 secs and this pdfunite takes 0.9 secs for merging two files! – rsmoorthy Jul 15 '15 at 19:49
A very nice solution is PDFChain. It's GUI is a frontend of PDFTK where you can merge, split or even add some background to your PDF files.
-
This is the best answer. It works perfectly, regardless of the Ubuntu version. – Paulo Coghi Feb 1 '17 at 17:33
-
-
-
Give PDFMod a try, it’s from the GNOME project:
-
-
it did merging in the past, now it's just crashing, I used the pdfshuffler instead and it worked great – jena Dec 11 '18 at 21:41
I use pdfseparate to extract specific pages from big pdf file:
pdfseparate -f 156 -l 157 input.pdf output_%d.pdf
pdfseparate -f 1 -l 2 input.pdf output_%d.pdf
and aftewards I join them all via command:
pdfunite $(ls -v output_*.pdf | tr '\n' ' ') out$(date +%Y-%m-%d_%H_%M_%S ).pdf
This joins:
output_1.pdf output_2.pdf output_156.pdf output_157.pdf
into:
out2014-12-14_23_25_36.pdf
May be there is an easier way how to cope... :-)
-
The process substitution is superfluous and potentially even harmful. A correct an much simpler command line is
pdfunite output_*.pdf out$(date +%Y-%m-%d-%H_%M_%S).pdf
but it lacks the ordering ofls -v
. An obvious and trivial fix is to name your files so that they naturally sort in the order you want to include them. If you absolutely wantls -v
, you can at least lose the pipe totr
, which accomplishes nothing here. – tripleee Apr 13 '15 at 14:24
An alternative approach is to use Latex as explained in this post (without root access assuming that you have pdflatex installed): https://tex.stackexchange.com/questions/8662/merge-two-pdf-files-output-by-latex
This is useful in case you do not have the mentioned tools nor root privileges, but you do have pdflatex.
I copy the tex code below to merge file1.pdf
and file2.pdf
. Create a file called output.tex
and put:
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-]{file1}
\includepdf[pages=-]{file2}
\end{document}
And to compile, simply use: pdflatex output.tex
The merged file will be named as output.pdf
.
You can use pdftk to merge and modify PDF documents in general. Alternatively there's an online service to do just that: http://www.pdfmerge.com/
Here is my approach:
- I wanted it to be easily accessible so I created a right-click shortcut in Nautilus (see https://help.ubuntu.com/community/NautilusScriptsHowto)
- I wanted it to be very quick so I used pdfunite
- pdfunite only accepts the filepaths in the middle of the command so I had to scratch my head to manage the spaces in the filepaths. So I took the assumption that all filepaths will start with "/home/" and end with ".pdf"
Here is the result:
#!/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 paste this script in
/home/your_username/.local/share/nautilus/scripts
and name it "merge_pdfs.sh" (for example). Then make it executable (right-click on merge_pdfs.sh -> Permissions tab -> tick "Allow executing file as a program"
So now to merge pdf files, you just have to select them -> right click -> scripts -> merge_pdfs.sh and it will create a "merged.pdf" file in the same directory
Hope it helps!
protected by Eliah Kagan Sep 6 '13 at 7:02
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?