If you print to a thermal receipt printer which support the ESC/POS protocol, then you can format the receipts to make larger or smaller text. If this is your first time reading about ESC/POS, have a read of What is ESC/POS, and how do I use it?. Some of these text size examples are borrowed from there, while some are new.
Smaller text
require __DIR__ . '/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
$connector = new FilePrintConnector("/dev/usb/lp0");
$printer = new Printer($connector);
/* Fonts (many printers do not have a 'Font C') */
$fonts = array(
Printer:::FONT_A,
Printer:::FONT_B,
Printer:::FONT_C);
for($i = 0; $i < count($fonts); $i++) {
$printer -> setFont($fonts[$i]);
$printer -> text("The quick brown fox jumps over the lazy dog\n");
}
$printer -> setFont(); // Reset
$printer -> cut();
$printer -> close();
00000000 1b 40 1b 4d 00 54 68 65 20 71 75 69 63 6b 20 62 |.@.M.The quick b|
00000010 72 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f |rown fox jumps o|
00000020 76 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 |ver the lazy dog|
00000030 0a 1b 4d 01 54 68 65 20 71 75 69 63 6b 20 62 72 |..M.The quick br|
00000040 6f 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 |own fox jumps ov|
00000050 65 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a |er the lazy dog.|
00000060 1b 4d 02 54 68 65 20 71 75 69 63 6b 20 62 72 6f |.M.The quick bro|
00000070 77 6e 20 66 6f 78 20 6a 75 6d 70 73 20 6f 76 65 |wn fox jumps ove|
00000080 72 20 74 68 65 20 6c 61 7a 79 20 64 6f 67 0a 1b |r the lazy dog..|
00000090 4d 00 1d 56 41 03 |M..VA.|
00000096
Change height & width
require __DIR__ . '/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
$connector = new FilePrintConnector("/dev/usb/lp0");
$printer = new Printer($connector);
/* Text of various (in-proportion) sizes */
title($printer, "Change height & width\n");
for ($i = 1; $i <= 8; $i++) {
$printer -> setTextSize($i, $i);
$printer -> text($i);
}
$printer -> text("\n");
$printer -> cut();
$printer -> close();
function title(Printer $printer, $text)
{
$printer -> selectPrintMode(Printer::MODE_EMPHASIZED);
$printer -> text("\n" . $text);
$printer -> selectPrintMode(); // Reset
}
00000000 1b 40 1b 21 08 0a 43 68 61 6e 67 65 20 68 65 69 |.@.!..Change hei|
00000010 67 68 74 20 26 20 77 69 64 74 68 0a 1b 21 00 1d |ght & width..!..|
00000020 21 00 31 1d 21 11 32 1d 21 22 33 1d 21 33 34 1d |!.1.!.2.!"3.!34.|
00000030 21 44 35 1d 21 55 36 1d 21 66 37 1d 21 77 38 0a |!D5.!U6.!f7.!w8.|
00000040 1d 56 41 03 |.VA.|
00000044
Change width only (height=4)
require __DIR__ . '/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
$connector = new FilePrintConnector("/dev/usb/lp0");
$printer = new Printer($connector);
/* Width changing only */
title($printer, "Change width only (height=4):\n");
for ($i = 1; $i <= 8; $i++) {
$printer -> setTextSize($i, 4);
$printer -> text($i);
}
$printer -> text("\n");
$printer -> cut();
$printer -> close();
function title(Printer $printer, $text)
{
$printer -> selectPrintMode(Printer::MODE_EMPHASIZED);
$printer -> text("\n" . $text);
$printer -> selectPrintMode(); // Reset
}
00000000 1b 40 1b 21 08 0a 43 68 61 6e 67 65 20 77 69 64 |.@.!..Change wid|
00000010 74 68 20 6f 6e 6c 79 20 28 68 65 69 67 68 74 3d |th only (height=|
00000020 34 29 3a 0a 1b 21 00 1d 21 03 31 1d 21 13 32 1d |4):..!..!.1.!.2.|
00000030 21 23 33 1d 21 33 34 1d 21 43 35 1d 21 53 36 1d |!#3.!34.!C5.!S6.|
00000040 21 63 37 1d 21 73 38 0a 1d 56 41 03 |!c7.!s8..VA.|
0000004c
Change height only (width=4)
require __DIR__ . '/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
$connector = new FilePrintConnector("/dev/usb/lp0");
$printer = new Printer($connector);
/* Height changing only */
title($printer, "Change height only (width=4):\n");
for ($i = 1; $i <= 8; $i++) {
$printer -> setTextSize(4, $i);
$printer -> text($i);
}
$printer -> text("\n");
$printer -> cut();
$printer -> close();
function title(Printer $printer, $text)
{
$printer -> selectPrintMode(Printer::MODE_EMPHASIZED);
$printer -> text("\n" . $text);
$printer -> selectPrintMode(); // Reset
}
00000000 1b 40 1b 21 08 0a 43 68 61 6e 67 65 20 68 65 69 |.@.!..Change hei|
00000010 67 68 74 20 6f 6e 6c 79 20 28 77 69 64 74 68 3d |ght only (width=|
00000020 34 29 3a 0a 1b 21 00 1d 21 30 31 1d 21 31 32 1d |4):..!..!01.!12.|
00000030 21 32 33 1d 21 33 34 1d 21 34 35 1d 21 35 36 1d |!23.!34.!45.!56.|
00000040 21 36 37 1d 21 37 38 0a 1d 56 41 03 |!67.!78..VA.|
0000004c
Very narrow font
require __DIR__ . '/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
$connector = new FilePrintConnector("/dev/usb/lp0");
$printer = new Printer($connector);
/* Very narrow text */
title($printer, "Very narrow text:\n");
$printer -> setTextSize(1, 8);
$printer -> text("The quick brown fox jumps over the lazy dog.\n");
$printer -> cut();
$printer -> close();
function title(Printer $printer, $text)
{
$printer -> selectPrintMode(Printer::MODE_EMPHASIZED);
$printer -> text("\n" . $text);
$printer -> selectPrintMode(); // Reset
}
00000000 1b 40 1b 21 08 0a 56 65 72 79 20 6e 61 72 72 6f |.@.!..Very narro|
00000010 77 20 74 65 78 74 3a 0a 1b 21 00 1d 21 07 54 68 |w text:..!..!.Th|
00000020 65 20 71 75 69 63 6b 20 62 72 6f 77 6e 20 66 6f |e quick brown fo|
00000030 78 20 6a 75 6d 70 73 20 6f 76 65 72 20 74 68 65 |x jumps over the|
00000040 20 6c 61 7a 79 20 64 6f 67 2e 0a 1d 56 41 03 | lazy dog...VA.|
0000004f
Very tall font
require __DIR__ . '/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
$connector = new FilePrintConnector("/dev/usb/lp0");
$printer = new Printer($connector);
/* Very flat text */
title($printer, "Very wide text:\n");
$printer -> setTextSize(4, 1);
$printer -> text("Hello world!\n");
$printer -> cut();
$printer -> close();
function title(Printer $printer, $text)
{
$printer -> selectPrintMode(Printer::MODE_EMPHASIZED);
$printer -> text("\n" . $text);
$printer -> selectPrintMode(); // Reset
}
00000000 1b 40 1b 21 08 0a 56 65 72 79 20 77 69 64 65 20 |.@.!..Very wide |
00000010 74 65 78 74 3a 0a 1b 21 00 1d 21 30 48 65 6c 6c |text:..!..!0Hell|
00000020 6f 20 77 6f 72 6c 64 21 0a 1d 56 41 03 |o world!..VA.|
0000002d
Largest possible font
require __DIR__ . '/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
$connector = new FilePrintConnector("/dev/usb/lp0");
$printer = new Printer($connector);
/* Very large text */
title($printer, "Largest possible text:\n");
$printer -> setTextSize(8, 8);
$printer -> text("Hello\nworld!\n");
$printer -> cut();
$printer -> close();
function title(Printer $printer, $text)
{
$printer -> selectPrintMode(Printer::MODE_EMPHASIZED);
$printer -> text("\n" . $text);
$printer -> selectPrintMode(); // Reset
}
00000000 1b 40 1b 21 08 0a 4c 61 72 67 65 73 74 20 70 6f |.@.!..Largest po|
00000010 73 73 69 62 6c 65 20 74 65 78 74 3a 0a 1b 21 00 |ssible text:..!.|
00000020 1d 21 77 48 65 6c 6c 6f 0a 77 6f 72 6c 64 21 0a |.!wHello.world!.|
00000030 1d 56 41 03 |.VA.|
00000034
Double-height and doule-width
There are also commands which specifically double the width and height. These overlap with the commands covered here, but you can find them in the escpos-php documentation.
Full example
These examples were authored for escpos-php, a PHP printer driver for thermal receipt printers. The full file ships as an example with the driver, and outputs a block of ESC/POS code which can be sent a printer to give this output:
Receipt
PHP code
<?php
/**
* This print-out shows how large the available font sizes are. It is included
* separately due to the amount of text it prints.
*/
require __DIR__ . '/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
$connector = new FilePrintConnector("php://stdout");
$printer = new Printer($connector);
/* Initialize */
$printer -> initialize();
/* Text of various (in-proportion) sizes */
title($printer, "Change height & width\n");
for ($i = 1; $i <= 8; $i++) {
$printer -> setTextSize($i, $i);
$printer -> text($i);
}
$printer -> text("\n");
/* Width changing only */
title($printer, "Change width only (height=4):\n");
for ($i = 1; $i <= 8; $i++) {
$printer -> setTextSize($i, 4);
$printer -> text($i);
}
$printer -> text("\n");
/* Height changing only */
title($printer, "Change height only (width=4):\n");
for ($i = 1; $i <= 8; $i++) {
$printer -> setTextSize(4, $i);
$printer -> text($i);
}
$printer -> text("\n");
/* Very narrow text */
title($printer, "Very narrow text:\n");
$printer -> setTextSize(1, 8);
$printer -> text("The quick brown fox jumps over the lazy dog.\n");
/* Very flat text */
title($printer, "Very wide text:\n");
$printer -> setTextSize(4, 1);
$printer -> text("Hello world!\n");
/* Very large text */
title($printer, "Largest possible text:\n");
$printer -> setTextSize(8, 8);
$printer -> text("Hello\nworld!\n");
$printer -> cut();
$printer -> close();
function title(Printer $printer, $text)
{
$printer -> selectPrintMode(Printer::MODE_EMPHASIZED);
$printer -> text("\n" . $text);
$printer -> selectPrintMode(); // Reset
}
Other formatting?
If text size is not what you’re after, then you can find similar examples in other posts I’ve tagged escpos.