Printing a large image on multiple pages

The Solution: Use PosteRazor.

  1. The task
  2. How to print?
    1. PosteRazor
    2. kprinter
    3. OpenOffice
    4. My solution: convert

The task

We needed some table decoration for a birthday. Since the subject to party with is a hobby photographer, we thought of a roll of film with pictures of the person that will lay in the middle of the tables - printed on normal paper of course since negatives are not so easy to look at. There were around 12 meters of table to decorate, and we had A4 paper to print on.

So at first we collected/scanned all the images we wanted to appear on the "roll of film" and gathered around 45 of them. The next part was the easy one: Generating an image that looks like a film roll with all the images in it. Gimp, the GNU Image Manipulation Program, already has a plugin for that: Filters > Combine > Filmstrip. I adjusted the height to 2048px and the color of the numbers and selected all images. After some minutes, the film strip was generated. A whopping 53432x2048 pixels in size! Here a scaled down version of the first part of the image:

First part of the film strip

Now how does one print such a huge image on a normal printer? The idea was to print on landscaped A4 paper with some seam on each page so the individual pages could be glued together afterwards. Quick check:

Size of A4: 29.7x21.0cm
Landscape: 21.0cm x 29.7cm
Size of image: 53432px x 2048px
$ 2048/210*297
2896
$ 53432/2896
18.45

Each paper gets 2896 of the 53k pixels; that's 19 pages of landscaped A4 sheets!

How to print?

Still the same problem: How to print? Gimp itself does not have a "print across multiple sheets" functionality. There are several threads on The InternetTM about printing on multiple pages on Linux, but apart from suggesting the poster application for Postscript files, no automated solutions were given.

PosteRazor

PosteRazor is the tool you want. It takes an image, lets you configure your desired sheet size and creates a PDF file with as many sheets it takes to reach it. Printing that file is easy!

It has predefined paper sheet sizes (A4, Letter) and supports custom ones. You may define your printer margins. Setup overlapping. Specify the alignment of the pictures that are not filled. Just everything you need to print that image on a poster.

Had I known it a year ago, things would have been easier and this blog entry would not exist.

PosteRazor screenshot

If you want to reset the settings in PosteRazor to their default values, you have to remove the configuration file that is located in ~/.fltk/CasaPortale.de/PosteRazor.prefs.

kprinter

kprinter, the KDE printing dialog, already supports scaling on multiple sheets, but only for "normal" sizes: A4 to A3 or A2 or A0 like that, no special sizes like my image was. It's on the "Poster" tab on the printer settings:

kprinter poster settings

OpenOffice

OpenOffice.org Draw also has the ability to print large drawings and images on several pages.

  1. Set the sheet size as large as your result shall be, i.e. 5 x A4.
  2. Click File and Print
  3. In the lower left corner, click "Options" button (German: "Zusätze")
  4. Page options: "Tile pages"
  5. Print

KIPI-Plugins

Any application making use of the KIPI library can be used to print images on several sheets. In Showfoto, the special printer dialog was not available but in Gwenview, you can find it at
PluginsImagesPrint imagesOptionsImage settingsMultiple pages

Unfortunately it is not really intuitive and you have to try a lot with the PDF printing to get what you want. Currently I cannot recommend it.

KIPI 'Print images' plugin

My solution: convert

So kprinter could not be used in my case. The tip that Scribus would support wallpaper printing cannot be confirmed by me; I did not find such an option there.

So what's left? Yep, the command line tools. The ImageMagick suite contains the swiss knife for CLI image manipulation, convert. convert lets you crop a region out of an image, which is what we needed:

convert kombi.jpg +repage -crop 2896x2048+0+0 single-1.jpg
convert kombi.jpg +repage -crop 2896x2048+2896+0 single-2.jpg

This two commands crop the first two A4 landscape sized sheets from the large kombi.jpg image file and save them as single-1.jpg resp. single-2.jpg.

Now that needed to be done 19 times; not something I wanted to do manually. Luckily for me, bash supports for loops:

i=0
for (( x=0; x<53432; x=x+2896 ))
do i=`expr $i + 1`
    echo $i
    convert kombi.jpg +repage -crop 2896x2048+$x+0 single-$i.jpg
done

You can type that with semicolons instead of newlines: i=0; for (( x=0; x<53432; x=x+2896 )); do i=`expr $i + 1`;echo $i; convert kombi.jpg +repage -crop 2896x2048+$x+0 single-$i.jpg; done

No two minutes later, I had 19 single images to print out! Opening them in some graphics program just for printing is nonsense, so I went the CLI way again:

lp -d Laser -o media=a4 -o landscape -o fitplot single-1.jpg

or in a loop:

for i in *.jpg; do lp -d Laser -o media=a4 -o landscape -o fitplot $i; done

Our printer has a 0.5cm margin on each side, so there was no need to print an extra glue margin. After cutting the paper a bit and glueing everything, we have a 6m x 0.21m foto strip as table decoration!

Written by Christian Weiske.

Comments? Please send an e-mail.