395

There are a lot of software in Windows to merge PDF files but how can we do the same in Ubuntu?

13 Answers 13

233

PDF-Shuffler (install)

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.

Screenshot of PDF-Shuffler

| improve this answer | |
  • I tried this - it didn't work on 10.04 – David Oneill Mar 13 '12 at 2:06
  • 8
    Installs and works like a charm on 14.04. Thanks a bunch!! – Zlatty Feb 12 '14 at 20:26
  • 1
    I can also confirm pdfshuffler works fine on 14.04 amd64. – conualfy Dec 28 '14 at 21:35
  • 2
    Also works great on 16.04.1 – Sanjay Manohar Nov 7 '16 at 12:36
  • 1
    Tried PdfShuffler 0.6.0 (apt-get install pdfshuffler) on Ubuntu 14.0 64-bit and it works with one caveat - It has problem dealing with some special characters in the filename (in my case pdfshuffler cannot load filename with #) – Tzunghsing David Wong Jan 24 '19 at 22:28
375

pdftk

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.

To install, run:

sudo snap install pdftk
| improve this answer | |
  • 5
    pdftk 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
  • 3
    pdftk has an unusual usage where commands cat and output follow variadic input arguments and followed again by an output argument. – Jeff Puckett Nov 7 '17 at 3:47
  • 4
    The package seems to have been removed in 2018.04. – Nicolas Raoul May 9 '18 at 9:07
  • 1
    @NicolasRaoul I just downloaded it as a snap install. – Max Aug 31 '18 at 14:55
  • 3
    FYI: sudo snap install pdftk - there is no release candidate for the aptitude app anymore, it was deprecated by the author, who created the snap package. – GrayedFox Oct 19 '18 at 14:30
181

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.

Source

| improve this answer | |
  • 2
    True, 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 from gs was about 21% smaller though. – aidan Mar 22 '13 at 6:47
  • 3
    this command also works if you use a wildcard for the list of files to be combined. for example, replace file1.pdf file2.pdf with file*.pdf – Antonios Hadjigeorgalis May 29 '14 at 13:58
  • 2
    For me gs worked with some "non conformant" PDFs where pdftk would just run forever. – ntc2 Dec 9 '14 at 4:37
  • 1
    Use -dPDFSETTINGS=/prepress option from quality improvement. All thanks due to the original contributor – Mohnish Apr 20 '16 at 11:58
  • 8
    @AntoniosHadjigeorgalis Just for reference and good understanding: that's not the command supporting wildcards, that's actually the shell replacing file*.pdf with file1.pdf file2.pdf before passing the arguments to the command. – Midgard Jun 15 '16 at 10:15
105

You also also use pdfunite to merge pdf documents :

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

To install pdfunite if it is not installed already, run:

sudo apt-get install poppler-utils
| improve this answer | |
  • 15
    WARNING: An existing file out.pdf will be overwritten without warning, so pdfunite *.pdf won't work as expected. – krlmlr Dec 4 '14 at 15:02
  • 1
    @krlmlr You can always put the output into another directory. – BЈовић Dec 4 '14 at 15:05
  • 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
  • 1
    Upvote: 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
  • 1
    This 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
35

PDF Chain Install PDF Chain

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.

| improve this answer | |
13

Give PDFMod a try, it’s from the GNOME project:

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

sudo apt install pdfmod
| improve this answer | |
  • does not do merging. – user2413 Aug 6 '18 at 6:44
  • 1
    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
11

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.

| improve this answer | |
8

Use pdfsam http://www.pdfsam.org/ it's very good for splitting and merging pdfs

sudo apt install pdfsam
| improve this answer | |
  • Used it under 19.10 to merge file: simple interface, a few options, works very well. But other features such as crop are premium options. sudo apt-get install pdfshuffler did the trick :-) – Will59 Mar 9 at 10:35
6

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... :-)

Installation instructions:

sudo apt install poppler-utils
| improve this answer | |
  • 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 of ls -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 want ls -v, you can at least lose the pipe to tr, which accomplishes nothing here. – tripleee Apr 13 '15 at 14:24
5

You can also use jPDFTweak, pdfsam or pdfjam.

(That said, I use pdftk.)

| improve this answer | |
  • It would be better if these were separate answers so that they could be upvoted separately and edited separately. – Flimm Jan 10 at 8:51
4

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/

| improve this answer | |
1

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!

| improve this answer | |
0

You can see use the free and open source pdftools (disclaimer: I am the author of it).

It is basically a Python interface to the Latex pdfpages package.

To merge pdf files one by one, you can run:

pdftools --input-file file1.pdf --input-file file2.pdf --output output.pdf

To merge together all the pdf files in a directory, you can run:

pdftools --input-dir ./dir_with_pdfs --output output.pdf
| improve this answer | |

Not the answer you're looking for? Browse other questions tagged or ask your own question.