Printing in Booklet Format from the Linux Command Line

Here is a Linux command to take a PDF of half-letter-sized pages
(5.5″x8.5″) and arrange them, two pages per side, for booklet printing:

$ pdftops -level3 source.pdf – | psbook | psnup -2 -W5.5in -H8.5in | ps2pdf – booklet.pdf

All of these utilities are standard on a Debian-based system. Several filters are tied together using [pipes](http://en.wikipedia.org/wiki/Pipeline_%28Unix%29 “Learn more about Unix Pipelines”) to produce a properly-formatted PDF.

### A Closer Look ###

Here’s a pipe-by-pipe breakdown of the command:

$ pdftops -level3 source.pdf

convert the source PDF to a level 3 postscript file (this is necessary
because the remaining steps require a postscript source file).

| psbook

rearrange the pages from the resulting postscript source file into the
appropriate order for notebook printing.

| psnup -2 -W5.5in -H8.5in

read in the reordered source file and arrange the reordered pages so
that two logical pages are printed on one physical sheet. If your
source pages are a different size, change the values of the `-W` and
`-H` options. You can use the `-p` option (or lowercase `-w` and `-h`)
to specify the output page size, but on Debian-based systems this value
is automatically read from `/etc/papersize`.

| ps2pdf – booklet.pdf

convert the resulting postscript file back into a PDF using the
filename specified. This step is not necessary if you know that the
machine you will print from can handle postscript files. If you leave
this step out, replace it with `> booklet.ps` to write the output to
a file named `booklet.ps`.

This method comes in handy because you don’t have to rely on printer
driver options to handle the booklet reordering. In my experience,
those driver options are terribly fussy and hard to work with.
Further, many printer drivers don’t offer this ability.

I hope you find this info helpful.

Based on info from
[Scribus Wiki](http://wiki.scribus.net/index.php/How_to_make_a_booklet#Method_A-1:_using_psutils_only).

**Update:** I experienced a bug in postscript that was causing a single
page to be rendered upside-down (rotated 180 degrees) when converted to
PDF. Unable to trace the source of the bug, I did find out that
filtering the postscript through `ps2ps` immediately after the initial
conversion from PDF, fixed the problem. `ps2ps` is a postscript
“distiller” which optimizes postscript into simpler form. This does
result in the loss of anti-aliasing, which uglies up the result on the
screen, but it does not affect printed copies.

If you experience rendering bugs, try adding `ps2ps`, as in the
following command:

$ pdftops -level3 source.pdf – | ps2ps – – | psbook | psnup -2 -W5.5in -H8.5in | ps2pdf – booklet.pdf

3 Comments

  • Aner Ben-Artzi says:

    Thanks for the helpful page. I probably would have spent a lot longer getting the booklet to print out without this as a reference.

    Suggestions:
    – in the breakdown, you left out the output – so the output would go to stdout
    – I found it helpful to add pstops ‘1:0@1.0(0cm,-2.5cm)’ as the second stage to shift (or scale) the original pages in order to get the margins right.

  • Aner Ben-Artzi says:

    The final step I needed (due to my having a one-sided printer) was to be able to rotate every other page by 180 degrees. I tried pstops ‘2:0U’ which should work, but pstops seems to be buggy.

    I finally found pdfbook which does everything in one step. Only downside is it took a long time to install texlive-full. Maybe texlive-core would have been enough.

  • Antonio says:

    Nicely done! This comes in handy for Evince users!

Leave a Reply

Your email address will not be published. Required fields are marked *