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.
hi, my name is Wandi, can you point me into the right code?
i have trouble to print my logo on my receipt using Epson tm88v
i watched people can print their logos from their POS software link to the Epson utility driver
thanks you in advance.
@Wandi – this post is unfortunately not going to help you much with graphics! You may want to check support with whichever software/library you’re using to print.
Thank you Mike for this post! It helped me very much!
how to bold and increase font size using escpos printer we are using star tsp700II printer.
i checked double width option and setTextsize is not working
mike please help me
what is the hex code for those Big Character.
Usually start with 1b .. something
The hex codes shown here are hexdumps of the ESC/POS binary that made these receipts. You will find detailed info in the programming guides for compatible printers, or check the setTextSize() function in https://github.com/mike42/escpos-php to see how this specific output is generated in the PHP library.
Hi Mike,
Thanks for your helpful post.
Is there any way I can set the text size to 1.5 times the normal text size? In your “Change height & width” example, the second text size is two times larger than the normal text size. I have been searching everywhere for a way to do this, but still couldn’t find anything.
@Lahiru – You can only perform whole-number multiples of the base font size. Ordinary text on an Epson printer is 12×24. Try switching to the smaller “Font B” (9×17) and then doubling it.
This is 18×34, which is something close to 1.5 times the size of Font A. I use this trick for loading 8×16 fonts: https://mike42.me/blog/2018-03-using-custom-fonts-to-add-new-glyphs-to-an-epson-printer
Thanks Mike. I will try it that way.
Can I increase the size of the font that prints on my Epson TM-M30 Bluetooth receipt printer. Thanks so much for your help