Ah, the old art of printing stuff in paper is still something nowadays.

From time to time I must setup printers (yeah, several models of: Oki, Lexmark and HP) to print bank checks in a A5 pre-formatted paper.

It sounds easy at first, you setup the printer trays with the correct paper size, you send print from your Linux and it should work… right?

Well, sometimes it is easy, and sometimes isn’t.

List of things to consider before printing

  • Physical paper size | The real size of our real paper
  • Digital paper size  | The size of our digital document
  • Printer’s tray size | The size of the physical tray in our printer
  • Printer’s ImageableArea or Image Registration (for HP) | Position/Margins of the digital document on the physical paper
  • Driver paper dimensions / ImageableArea (PPD Drivers)
  • CUPS  (Printer Configuration and PPD compatibility).

The paper digital and physical sizes

Let’s take a look on the different sizes we must consider, in my example I need to setup an A5 vertical sheet to print an A5 digital document, but the measure of every tool is different:

  • A5 Standard (taken from here): 148x210mm
  • Our physical paper size (yeah, the real one): 5.984252  x 8.346457 (inches) | 15,2cm x 21,2 cm
  • HP Printer  personalized tray to match the real paper size (tray of HP E60075): A5
  • HP Default printer options X,Y Dimensions: 8.46 x 13.98 inches (default) | changed to: 5.984252  x 8.346457
  • evince | GNOME Document Viewer 3.22.1: A5, Landscape (8.26 × 5.83 inch) | 148.082 mm x 209.804 mm
  • pdfinfo | version 0.48.0:  Page size: 595 x 420 pts (postscript points) | 148.167 mm x 209.903 mm
  • postscript PCL/PPD driver: *PaperDimension A5/A5: «419.760009765625 595.440002441406» (postscript points)

Points, inches and millimeters, different measures which you must match. We must setup everything according the physical paper size.

As we can see, there are small differences between some sizes (so we could expect some millimeters of deviation), some times after you print you notice the document is incomplete (because it’s margins), usually you can correct this from the Margins/Image Registration in your printer, but always consider the previous points to be configured correctly.

The physical paper size is different compared to the information obtained from the digital PDF .

I will setup manually the printer tray dimensions, the E60075 recognized it as A5.

The printing order in Linux has been created this way:

lpr -P HPE60075 -omedia=A5 -osides=two-sided-short-edge my_check.pdf

The CUPS  version and PPD version

Well, if you do not copy a driver (PPD) for your printer it will be taken as «Local Raw Printer» when using lpoptions:

MORTIZSERVER:/etc/cups # lpoptions -p HPE60075
finishings=3 copies=1 job-hold-until=no-hold job-priority=50 number-up=1 
auth-info-required=none job-sheets=none,none printer-info=HPE60075 
printer-is-accepting-jobs=1 printer-is-shared=1 printer-location 
printer-make-and-model='Local Raw Printer' printer-state=3 
printer-state-change-time=1509374263 printer-state-reasons=none 
printer-type=4

After copying the PPD driver in /etc/cups/ppd and giving it the name of the configured printer, i.e:

# printers.conf
<Printer HP_LaserJet_E60075>

# your PPD Driver in /etc/cups/ppd should be:
HP_LaserJet_E60075.ppd

# Restart CUPS!

then we see a different thing, the PPD has been loaded (Generic PCL 5 Printer Foomatic/gimp-print)

MORTIZSERVER:/etc/cups/ppd # lpoptions -p HPE60075
media=A4 finishings=3 copies=1 job-hold-until=no-hold job-priority=50 
number-up=1 auth-info-required=none job-sheets=none,none 
printer-info=HPE60075 printer-is-accepting-jobs=1 
printer-is-shared=1 printer-location 
printer-make-and-model='Generic PCL 5 Printer Foomatic/gimp-print (recommended)' 
printer-state=3 printer-state-change-time=1509374263 
printer-state-reasons=none printer-type=4100

If we do a cat of the PPD file:

MORTIZSERVER:/etc/cups/ppd # cat HPE60075.ppd |grep Foomatic
*% "foomatic-rip" backend filter script of Foomatic 3.0.0 or newer. This 
*NickName:      "Generic PCL 5 Printer Foomatic/gimp-print (recommended)"
#etc...

Now using the real PPD file for HP LaserJet Managed E60075:

MORTIZSERVER:/etc/cups/ppd # lpoptions -p HPE60075
media=Letter sides=one-sided finishings=3 copies=1 job-hold-until=no-hold 
job-priority=50 number-up=1 auth-info-required=none job-sheets=none,none 
printer-info=HPE60075 printer-is-accepting-jobs=1 printer-is-shared=1 
printer-location printer-make-and-model='HP LaserJet E60055-E60075 Postscript (recommended)'
printer-state=5 printer-state-change-time=1540564853 
printer-state-reasons=cups-missing-filter-error 
printer-type=37076

Unfortunately I’ve tried using the latest LaserJet Managed E60075 PPD Driver which I’ve obtained after installing HPLIP but it is not compatible with my CUPS ​1.3.9, it worked with CUPS 2.1.1 but I can’t update our cups servers for several reasons. I’m uploading all the ppd drivers for HP and Lexmark with cups configurations here. (And hoping you won’t need this never).

Then I tried using a Lexmark PPD (don’t ask me why) which I had over there, it worked but the printing was cut, so I’ve aligned the printer to do it right:

Because of the orientation of the paper on the printer and because my document is being printed in Duplex it must be «Back-side». If it was only one sheet I just would adjusted the «Front-side».


After adjusting the image registration I’ve finally reached the perfect printing 🙂

This post is intended to serve as a guide for my future self.