Key Takeaway
Designing a thermal receipt means designing inside a 48-column monospaced grid where every dot is either burned or blank. Emphasis comes from four ESC/POS controls — bold, double-strike, character size and font selection — and using them sparingly is what makes a total readable on cheap paper.
A receipt is the only user interface most customers of a small shop will ever hold. It is also the most constrained interface I have ever designed for: no colour, no greys, no proportional type, one column 72 millimetres wide, and a printing surface that starts fading the moment it leaves the printer. Everything that makes web typography pleasant is unavailable.
What is left is a small set of physical controls and a lot of discipline. This is the set of principles I arrived at after redesigning the same receipt about fifteen times against a TM-T82, and after watching cashiers and customers actually use the paper.
The medium decides the design
Three properties of thermal line printing shape every decision that follows, and none of them are negotiable in software.
- A dot is on or off. There is no anti-aliasing and no grey. Anything that relies on subtle weight differences — a light footnote, a hairline rule — either prints solid black or does not print at all.
- The grid is fixed. Font A occupies 12 by 24 dots and yields 48 columns on 80 mm paper; Font B is 9 by 17 dots and yields 64. On the 58 mm rolls used by mobile printers, that same Font A gives you about 32. Your layout is a character count, not a pixel measurement.
- The image is chemistry, not pigment. The head heats a coating that darkens, so contrast depends on paper quality, head temperature and print speed. The same byte stream looks noticeably different on a premium roll and on the cheapest roll in the market.
Once you accept these, the design question stops being what looks good on screen and becomes what stays readable after the paper has spent a week in a wallet.
The four emphasis controls, and what each costs
ESC/POS gives you a handful of ways to make text stand out. They are not interchangeable — each trades something away, and knowing what makes the difference between a receipt that reads well and one that is just loud.
| Control | What it does | What it costs |
|---|---|---|
| ESC E 1 — emphasized | Prints each character darker and slightly heavier; the standard bold | Slightly slower and more energy per dot; loses all meaning if used on more than a few lines |
| ESC G 1 — double-strike | Prints the same line twice for extra density on tired heads or poor paper | Doubles the time for that line and can smear if the paper is already dark |
| GS ! n — character size | Doubles height, width or both, so a header reads across a counter | Double width halves your column budget from 48 to 24 on that line |
| ESC M 1 — Font B | Smaller 9 by 17 cell, 64 columns, ideal for legal and footer text | Noticeably harder to read on cheap paper and for older eyes |
| GS B 1 — reverse video | White text on a solid black block, maximum attention | Burns the entire cell area: slow, heavy on the head and battery, and the block fades unevenly |
My working rule is that a receipt may use at most three of these on any single ticket. Beyond that the reader loses the ordering between them, and the receipt reads as noise with some large text in it.

Four levels of hierarchy, and no more
Print typography gives you dozens of levels. A receipt supports four, and trying for a fifth just weakens the other four. This is the ladder I use, expressed directly as the commands that produce it.
Level 1 store name GS ! 0x11 + ESC E 1 double size, emphasized
Level 2 section label ESC E 1 normal size, emphasized
Level 3 item lines Font A, plain the body text of a receipt
Level 4 legal / footer ESC M 1 (Font B) smaller, deliberately quiet
TOKO SUMBER REJEKI <- level 1, the only double-size line
Jl. Diponegoro 12 level 4
2026-08-18 14:32 Kasir: Rina level 4
------------------------------------------------
Kopi Susu Gula Aren 2 x 25.000
50.000 <- level 3
Roti Bakar Coklat 1 x 18.000
18.000
------------------------------------------------
TOTAL 68.000 <- level 2, emphasized
TUNAI 100.000
KEMBALI 32.000
------------------------------------------------
Terima kasih atas kunjungan Anda level 4The important discipline is that level 2 exists exactly once or twice per receipt. If the subtotal, the tax line, the total and the change are all emphasized, then none of them is, and the customer scans the whole block looking for the number they care about.
Print your candidate layout, then look at it from a metre away for one second — the distance and time a customer actually gives a receipt. Whatever you can read in that second is your real hierarchy, regardless of what you intended.
Why bold is a functional requirement, not a style choice
On a screen you can adjust colour, weight and size independently. On thermal paper, emphasized print is the only control that directly increases the amount of darkened coating per character, which means it is the only control that buys you resistance to fading, weak paper and a worn head.
- Bold the total. It is the one line that gets read after the paper has aged, photographed for an expense claim, or squinted at in a badly lit stockroom.
- Bold the store name, and set it double size. It is what makes the ticket identifiable when it is one of thirty in a shoebox at tax time.
- Never bold body text. Emphasizing every item line costs print time on every sale and removes the contrast that made the total findable.
- Reach for double-strike only as a remedy. If a specific shop reports pale receipts, enabling double-strike on the total is a two-byte fix that buys months before the head or the paper supplier has to change.
There is a second reason to be sparing that only shows up on battery-powered printers: darkening more dots draws more current. A layout full of emphasized text and black blocks measurably shortens a mobile printer's shift.

Designing for a document that is actively fading
Thermal paper has no ink. The dark areas are a chemical reaction in a coating, and that coating stays reactive: sunlight, a hot dashboard, the oils on a receipt in a back pocket and simple abrasion all keep pushing it. A receipt that is crisp today can be unreadable in a summer month, and archival storage guidance for thermal rolls is genuinely about temperature and humidity ranges rather than about the printer.
The design implication is concrete. Assume partial loss and make sure the surviving 20 per cent is the part that matters: shop identity, date, transaction number and total. Fine print can fade without consequence; a faded total is a dispute. If customers need a durable copy — a warranty, a business expense — print a short URL or a QR code that resolves to the digital receipt instead of pretending the paper will last.
Resist the large black logo. A full-width reverse block or a heavy raster image is the slowest, hottest, most power-hungry thing a thermal printer can do; it wears the head unevenly, it curls the paper, and it fades into a grey smudge faster than text does. A crisp text header outlives a beautiful logo every time.
Whitespace, feed and the cut
Vertical space on a receipt costs money and time in a way it never does on screen: at 203 dpi a blank Font A line is roughly three millimetres of paper, and a shop doing eight hundred tickets a day pays for every one of them.
- Use exactly one blank line between logical blocks, and never two. The eye reads the gap; the second gap only buys paper waste.
- Feed before you cut, not before you print. The gap between print head and blade is why the cut command has a feed variant, and getting this wrong slices the last line in half.
- End with the smallest feed that lets a hand grab the ticket. Three to four lines is usually enough; six is a habit inherited from older hardware.
A receipt design checklist
Before shipping a layout, I run it through five checks. They take ten minutes and have caught something almost every time.
- Print it on the cheapest paper the shop actually buys, not the sample roll that came in the box.
- Count the columns of your longest possible product name plus your largest possible amount, and confirm they fit in 48 with a space between them.
- Read the ticket from a metre away and confirm that the shop name and the total are the only things you can resolve.
- Leave one copy on a sunny windowsill for a week and re-read it. This single test has changed more of my layouts than any style guide.
- Hand it to the cashier who will use it eight hundred times and ask what they wish were bigger. They will tell you immediately.
Receipt design is constraint design. There is no colour to hide behind and no font to swap in, so the whole craft is deciding which two or three lines deserve the printer's darkest output and letting everything else stay quiet. Get that ordering right and a 48-column monospaced ticket reads better than most dashboards.


