How to print a large poster on standard paper with a standard printer

Suppose that one needs to print an A0 poster but their printer only supports A3 or A4 paper. Then, it is necessary to split up the image into smaller rectangular pieces, print them, and glue them together. In the past, I would go to Photoshop, mark the image up with guides, and meticulously shift the printing area every time to output a piece of the puzzle. But gone are those days; in 2024, there are excellent open-source and free command-line tools to achieve the goal: pdfposter, pdfcrop, and pdfjam.

Steps:

  1. Cut up a PDF into n×m rectangular A4 chunks with pdfposter;
  2. Add white margins (e.g. 5 mm) with pdfcrop to allow glueing;
  3. Resize each chunk back to A4 again with pdfjam.

How to print a poster on smaller paper in multiple pages

Observe that 1×A0 = 2×A1= 4×A2 = 8×A3 = 16×A4. Therefore, we need to chop up the original page into 4x4 chunks.

The units of measurement accepted by pdfcrop are base points; 1 inch = 2.54 cm = 72 base points. Therefore, to avoid any cropping by pdfcrop, the bounding box should match the bounding box of the A4 page. The width of 21 cm becomes w := 21 / 2.54 * 72 = 595.28 BP and the height of 29.7 cm becomes h := 29.7 / 2.54 * 72 = 841.89 BP.

Solution:

sudo apt install pdfposter texlive-extra-utils # for pdfcrop and  pdfjam

# Slicing one page for printing on 16 A4 pages
pdfposter -m a4 -p4x4a4 poster.pdf pos-16xA4.pdf

# Add safety margins of 15 base points ~ 0.5 cm
# Get the largest bounding box from a preliminary run to be sure that
# the values 595.5 and 842.0 are correct
pdfcrop --margin '15' --bbox '0 0 595.5 842.0' --verbose poster-16xA4.pdf poster-16xA4-margins.pdf

# Resize to A4 again
pdfjam --outfile poster-final.pdf --papersize '{210mm, 297mm}' poster-16xA4-margins.pdf

rm poster-16xA4.pdf poster-16xA4-margins.pdf  # Clean up

The final result is bound to have slightly larger margins on the wider side: adding 15 bp to each side equally creates a 625.27×871.89-bp image slightly more similar to a square that is scaled to fit the width of the A4 sheet. pdfjam will therefore use the scaling factor of f := w/(w+30) ~ 0.952 (where w is the width in base points defined above). The final margins will be 15 * f = 14.28 bp ~ 0.50 mm horizontally and (h - h*f) / 2 = 20.20 bp ~ 0.71 mm, which whould be enough for modern printers.

Step 3 can be skipped if one uses something like Adobe Acrobat and can set the scale before printing (e.g. 95%) or the printer driver has the ‘Fit to page’ feature that resizes the content to make sure that nothing is trimmed away at the page edges. Even step 2 can be skipped if content scaling can be handled at the printer-driver level. However, if the printer needs to have the final layout in 1:1 scale, like cloud printing does, then, all steps are necessary.

This solution is quite general and does not restrict anyone’s choice to popular paper sizes (A4, A3, letter etc.). This is also useful for handling 85×55-mm business cards, 35×45-mm document photos, 150×100 family-album photos etc.

The output of pdfcrop may contain useful information about the actual measurements of the non-white space of each page in the PDF. Check the console output for non-standard paper sizes – be sure to grab the largest dimension. Here is how the output could look like for a poster that was chopped up into 8 pieces for a printer that supports A3 paper:

pdfcrop --margin '15' --bbox '0 0 595.5 842.0' --verbose pos-8xA3.pdf marg.pdf
PDFCROP 1.42, 2023/04/15 - Copyright (c) 2002-2023 by Heiko Oberdiek, Oberdiek Package Support Group.
* PDF header: %PDF-1.3
* Running Ghostscript for BoundingBox calculation ...
GPL Ghostscript 10.03.1 (2024-05-02)
Copyright (C) 2024 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 8.
Page 1
%%BoundingBox: 0 0 567 1192
* Page 1: 0 0 842.003 1191.005
%%HiResBoundingBox: 0.000000 0.000000 566.977764 1191.005964
Page 2
%%BoundingBox: 0 0 843 1192
* Page 2: 0 0 842.003 1191.005
%%HiResBoundingBox: 0.000000 0.000000 842.003974 1191.005964
Page 3
%%BoundingBox: 0 0 843 1191
* Page 3: 0 0 842.003 1191.005
%%HiResBoundingBox: 0.000000 0.000000 842.003974 1190.987964
...

Here, 842 and 1191 are the BP page dimensions that should be used as inputs to the bounding box argument, i.e. the next run should be

pdfcrop --margin '15' --bbox '0 0 842 1191' --verbose pos-8xA3.pdf marg.pdf

Free and open-source (FOSS) software can and should be used for creative jobs to lift the burden of post-processing and print production. Dragging a large image manually in the print preview can be done for a quick and simple resizing job (e.g. 2×2). However, nobody needs to purchase software licences for heavy corporate Adobe software (unless it fulfils their artisic needs) and to redo everything once there are tiny changes to the layout.

Fun fact: many FOSS tools for resizing, rescaling, cropping PDFs rely on... pdflatex! The invention of Donald Erwin Knuth, Leslie Lamport, and Hàn Thế Thành is only growing in relevance in 2024!