The Solution: Use PosteRazor.
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:
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 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.
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, 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:
OpenOffice.org Draw also has the ability to print large drawings and images on several pages.
- Set the sheet size as large as your result shall be, i.e. 5 x A4.
- Click File and Print
- In the lower left corner, click "Options" button (German: "Zusätze")
- Page options: "Tile pages"
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
Plugins → Images → Print images → Options → Image settings → Multiple 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.
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!