A single-page printer test sheet that checks colour, tonal response and geometry in one pass. It is plain PostScript with no dependencies beyond Ghostscript, and it prints at true size on A4, US Letter, US Legal and Folio from one source.
Most printer test pages tell you a printer is alive. This one tells you what is wrong with it. Each section isolates one failure mode, and the geometry section is measurable with an ordinary ruler, so "it looks a bit off" becomes a number you can act on.
It was written while debugging a network laser printer that silently fell back to greyscale and was suspected of printing on the wrong paper size. Both questions were settled by measuring one sheet.
| Section | What it shows | What a failure looks like |
|---|---|---|
| 1. Process colours (CMYK) | Each toner or ink channel fires independently | A grey or missing patch means that channel is empty, clogged, or the job was converted to monochrome |
| 2. Additive colours (RGB) | The RGB to CMYK conversion in the print path | Muddy or shifted secondaries point at a colour management problem, not a hardware one |
| 3. Cyan tint ramp, 10% to 100% | Halftoning and light-tone reproduction | Steps that merge at the light end mean the printer cannot resolve fine tints |
| 4. Greyscale | Neutrality of the grey axis | A colour cast in the greys means the printer needs calibrating |
| 5. Geometry | Scaling and centring | The scale must measure exactly 150 mm and the corner crosses exactly 10 mm from each edge |
| 6. Paper size | Which sheet the file was generated for, and its exact dimensions | The frame is 170 mm wide on every paper, so sheets from different sizes lay directly on top of each other |
Ghostscript, to turn the PostScript into a PDF.
sudo apt install ghostscript # Debian, Ubuntu
brew install ghostscript # macOSThat is all you need to build and print. Regenerating the preview image in this README additionally needs Poppler (pdftoppm) and ImageMagick (convert), which most people will never have to do.
./build.sh # A4, the default
./build.sh letter # any supported size
./build.sh a4 legal # several at once
./build.sh all # every supported sizeSupported papers are A4, US Letter, US Legal and Folio. Adding another is usually a single line — see CONTRIBUTING.md.
Or drive Ghostscript directly, which is all the script does:
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dAutoRotatePages=/None \
-o test-page-letter.pdf -c "/PAPER (letter) def" -f test-page.psThe page size is declared inside the PostScript, so you do not need -sPAPERSIZE.
You can send the PostScript straight to CUPS, or print the PDF:
lp -d YOUR_PRINTER test-page-a4.pdf
lpstat -p YOUR_PRINTER # watch it go throughIf your printer accepts PDF natively, printing the PDF avoids a rasterisation step in the driver and is the better test of the real print path.
Everything is grey. The print path forced monochrome somewhere. On CUPS, check the queue rather than the printer, because the two advertise different capabilities:
lpoptions -p YOUR_PRINTER | tr ' ' '\n' | grep -i color
ipptool -tv ipp://localhost/printers/YOUR_PRINTER get-printer-attributes.test \
| grep -i print-color-modeA queue built from an IPP Everywhere PPD typically supports only monochrome and color, even when the printer itself also supports auto. Setting an unsupported value is accepted silently and then ignored, which looks exactly like the setting having no effect.
The scale does not measure 150 mm. The job was scaled. Look for "fit to page" or "shrink to fit" in whatever produced the job, and for a paper size mismatch between the document and the queue.
The corner crosses are not 10 mm from the edges. The sheet is centred wrongly, usually because the document and the tray disagree about paper size. A4 is 210 x 297 mm and US Letter is 215.9 x 279.4 mm, so a mismatch shows up as roughly 3 mm horizontally and 9 mm vertically.
The greys have a cast. Run the printer's own calibration. This is not something the host can fix.
test-page.ps is hand-written PostScript with a running layout cursor, so sections flow rather than sitting at hard-coded coordinates. The G constant scales only the whitespace between sections, which is how one layout fits papers of different heights without changing the size of anything you are meant to measure. It is derived from the page height rather than tuned by hand.
Contributions are welcome, and more paper sizes are the most useful thing you can add. If your printer takes something this page does not yet support, adding it is usually one line in the PAPERS dictionary at the top of test-page.ps, and build.sh picks it up with no further changes.
Small paper is a harder and more interesting problem. A5 and B5 cannot simply be added, because the 150 mm scale and the 170 mm reference frame are measurements rather than decoration and so cannot shrink. CONTRIBUTING.md explains the layout, states which dimensions must never scale, and sets out four possible approaches for anyone who fancies solving it.
A duplex registration page and finer tint steps at the light end are also wanted.
MIT. See LICENSE.
