Let us say I want slides.pdf to contain 4 slides per page.

I can open a slides.pdf document under evince (the default Ubuntu document viewer)

evince slides.pdf-->Print-->Page Setup--> Pages per Side --> 4 (or some other number)

Then, I can indicate I want to print to a file, and print. The result is an output.pdf file with the desired number of slides per sheet.

I want to achieve this same functionality through the command line (as I need to incorporate this into a script). All I have found some far are solutions relying on external tools. For example, I tried installing pdfjam (which required me to install 88.1 MB worth of packages from texlive-latex-base in order to achieve a functionality that I already have!), The result was only failure with pdfjam ERROR: LaTeX package pdfpages.sty is not installed.

I would rather avoid external packages.

How do I achieve this through the command line?

4 Answers 4


to perform an IMPOSITION, nothing is better than Multivalent.jar (latest free version with tools inside, latest Multivalent build currently hosted on sourceforge - 2009 - has no more pdf tools)

you can download the Multivalent.jar build with tools from:

online man - http://multivalent.sourceforge.net/Tools/pdf/Impose.html


java -cp path...to/Multivalent.jar tool.pdf.Impose -dim (rowsxcols) -paper (paper sizes where pages will be imposed) file.pdf

You can also use pdfnup:

pdfnup --nup 2x2 --no-landscape file.pdf

where 2x2 refers to 2 rows by 2 columns (or the reverse--I'm not sure). See man pdfnup for more options.

  • 4
    pdfnup works fine. A note for people who want to put the same one page PDF four times on one page: You need to list the input pdf file four times: pdfnup --no-landscape --a4paper --nup 2x2 input.pdf input.pdf input.pdf input.pdf
    – guettli
    Dec 20, 2014 at 17:16
  • 1
    An addition to above answer + comment: pdfnup --nup 2x2 --frame true --noautoscale false --delta "0.2cm 0.3cm" --scale 0.90 your.pdf will print 4 slides on one page of a pdf file named "your-nup.pdf" using content of "your.pdf" as input pages. --frame true prints a frame around each slides, --delta... specifies a margin between frames, and --scale ... ensures that a sheet margin is introduced so your printer handles the job well without cutting off content. All options at www2.warwick.ac.uk/fac/sci/statistics/staff/academic-research/….
    – Cbhihe
    Feb 14, 2017 at 17:20
  • Paul Robert: I know yr answer is old but feel free to incorporate my comment in yr answer. I can't speak for @guettli. Everything works well for Ubuntu up to 16.04 at least. (I have not tested it on a rolling distribution with the latest of kernel images and packages.) Cheers.
    – Cbhihe
    Feb 14, 2017 at 17:22
  • BTW, pdfnup uses internally the pdfpages.sty package, which the op did not want to use. I have the opposite feeling: I will use the pdfpages.sty package in TexStudio to do the job.
    – Dominic108
    Jun 19, 2019 at 23:04

For me pdfnup was not available, and whilepdfxup did not work, pdfjam did:

pdfjam --nup 2x2 <infile>

To specify the output file name (in place of the autogenerated one) use the option --outfile

pdfjam --nup 2x2 <infile> --outfile <outfile>

The only tool I've found that can do this and is maintained is PyPDF2 https://pythonhosted.org/PyPDF2/index.html

You can see some example code at: https://superuser.com/a/1508283/590044

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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