Browser Thermal Printer
Browser module for EPSON and STAR thermal printers command line printing.
Installation
npm install browser-thermal-printer --save
Features
import ThermalPrinter, { PrinterTypes } from "../browser-thermal-printer";
const printer = new ThermalPrinter(PrinterTypes.STAR);
printer.print("Hello World"); // Append text
printer.println("Hello World"); // Append text with new line
printer.openCashDrawer(); // Kick the cash drawer
printer.cut(); // Cuts the paper (if printer only supports one mode use this)
printer.partialCut(); // Cuts the paper leaving a small bridge in middle (if printer supports multiple cut modes)
printer.beep(); // Sound internal beeper/buzzer (if available)
printer.upsideDown(true); // Content is printed upside down (rotated 180 degrees)
printer.setCharacterSet("SLOVENIA"); // Set character set - default set on init
printer.setPrinterDriver(Object); // Set printer drive - default set on init
printer.bold(true); // Set text bold
printer.invert(true); // Background/text color inversion
printer.underline(true); // Underline text (1 dot thickness)
printer.underlineThick(true); // Underline text with thick line (2 dot thickness)
printer.drawLine(); // Draws a line
printer.newLine(); // Insers break line
printer.alignCenter(); // Align text to center
printer.alignLeft(); // Align text to left
printer.alignRight(); // Align text to right
printer.setTypeFontA(); // Set font type to A (default)
printer.setTypeFontB(); // Set font type to B
printer.setTextNormal(); // Set text to normal
printer.setTextDoubleHeight(); // Set text to double height
printer.setTextDoubleWidth(); // Set text to double width
printer.setTextQuadArea(); // Set text to quad area
printer.setTextSize(7, 7); // Set text height (0-7) and width (0-7)
printer.leftRight("Left", "Right"); // Prints text left and right
printer.table(["One", "Two", "Three"]); // Prints table equaly
printer.tableCustom([
// Prints table with custom settings (text, align, width, cols, bold)
{ text: "Left", align: "LEFT", width: 0.5 },
{ text: "Center", align: "CENTER", width: 0.25, bold: true },
{ text: "Right", align: "RIGHT", cols: 8 },
]);
printer.code128("Code128"); // Print code128 bar code
printer.printQR("QR CODE"); // Print QR code
await printer.printImage("./assets/olaii-logo-black.png"); // Print PNG image
print.clear(); // Clears printText value
print.getText(); // Returns printer buffer string value
print.getBuffer(); // Returns printer buffer - Pass this buffer to printer
print.setBuffer(newBuffer); // Set the printer buffer to a copy of newBuffer
print.getWidth(); // Get number of characters in one line
How to run examples (Set to EPSON)
2D Barcode Examples
Example settings are the default when not specified.
printer.code128("Code128", {
width: "LARGE", // "SMALL", "MEDIUM", "LARGE",
height: 80, // 50 < x < 80
text: 2, // 1 - No text
// 2 - Text on bottom
// 3 - No text inline
// 4 - Text on bottom inline
});
printer.printQR("QR Code", {
cellSize: 3, // 1 - 8
correction: "M", // L(7%), M(15%), Q(25%), H(30%)
model: 2, // 1 - Model 1
// 2 - Model 2 (standard)
// 3 - Micro QR
});
printer.pdf417("PDF417", {
rowHeight: 3, // 2 - 8
width: 3, // 2 - 8
correction: 1, // Ratio: 1 - 40
truncated: false, // boolean
columns: 0, // 1 - 30, 0 auto
});
printer.maxiCode("MaxiCode", {
mode: 4, // 2 - Formatted/structured Carrier Message (US)
// 3 - Formatted/structured Carrier Message (International)
// 4 - Unformatted data with Standard Error Correction.
// 5 - Unformatted data with Enhanced Error Correction.
// 6 - For programming hardware devices.
});
1D Barcode Example
var data = "GS1-128"; // Barcode data (string or buffer)
var type = 74; // Barcode type (See Reference)
var settings = {
// Optional Settings
hriPos: 0, // Human readable character 0 - 3 (none, top, bottom, both)
hriFont: 0, // Human readable character font
width: 3, // Barcode width
height: 168, // Barcode height
};
printer.printBarcode(data, type, settings);
Epson Barcode Reference
# |
Type |
Possible Characters |
Length of Data |
65 |
UPC-A |
0 - 9 |
11, 12 |
66 |
UPC-E |
0 - 9 |
6 – 8, 11, 12 |
67 |
JAN13 |
0 - 9 |
12, 13 |
68 |
JAN8 |
0 - 9 |
7, 8 |
69 |
Code39 |
0 – 9, A – Z, SP, $, %, *, +, -, ., / |
1 – 255 |
70 |
ITF (Interleaved 2 of 5) |
0 – 9 |
2 – 254 (even number) |
71 |
CODABAR (NW-7) |
0 – 9, A – D, a – d, $, +, −, ., /, : |
2 – 255 |
72 |
CODE93 |
00h – 7Fh |
1 – 255 |
73 |
CODE128 |
00h – 7Fh |
2 - 255 |
74 |
GS1-128 |
NUL – SP(7Fh) |
2 – 255 |
75 |
GS1 DataBar Omnidirectional |
0 – 9 |
13 |
76 |
GS1 DataBar Truncated |
0 – 9 |
13 |
77 |
GS1 DataBar Limited |
0 – 9 |
13 |
78 |
GS1 DataBar Expanded |
0 – 9, A – D, a – d, SP, !, ", %, $, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, _, { |
2 - 255 |
STAR Barcode Reference
var data = "TEST"; // Barcode data (string or buffer)
var type = 7; // Barcode type (See Reference)
var settings = {
// Optional Settings
characters: 1, // Add characters (See Reference)
mode: 3, // Barcode mode (See Reference)
height: 150, // Barcode height (0≤ height ≤255)
};
printer.printBarcode(data, type, settings);
Type
# |
Type |
0 |
UPC-E |
1 |
UPC-A |
2 |
JAN/EAN8 |
3 |
JAN/EAN13 |
4 |
Code39 |
5 |
ITF |
6 |
CODE128 |
7 |
CODE93 |
8 |
NW-7 |
Settings characters
# |
Description |
1 |
No added under-bar characters. Executes line feed after printing a bar code |
2 |
Adds under-bar characters. Executes line feed after printing a bar code |
3 |
No added under-bar characters. Does not execute line feed after printing a bar code |
4 |
Adds under-bar characters. Does not execute line feed after printing a bar code |
Settings mode
# |
UPC-E, UPC-A, JAN/EAN8, JAN/EAN13, Code128, Code93 |
Code39, NW-7 |
ITF |
1 |
Minimum module 2 dots |
Narrow: Wide = 2:6 dots |
Narrow: Wide = 2:5 dots |
2 |
Minimum module 3 dots |
Narrow: Wide = 3:9 dots |
Narrow: Wide = 4:10 dots |
3 |
Minimum module 4 dots |
Narrow: Wide = 4:12 dots |
Narrow: Wide = 6:15 dots |
4 |
|
Narrow: Wide = 2:5 dots |
Narrow: Wide = 2:4 dots |
5 |
|
Narrow: Wide = 3:8 dots |
Narrow: Wide = 4:8 dots |
6 |
|
Narrow: Wide = 4:10 dots |
Narrow: Wide = 6:12 dots |
7 |
|
Narrow: Wide = 2:4 dots |
Narrow: Wide = 2:6 dots |
8 |
|
Narrow: Wide = 3:6 dots |
Narrow: Wide = 3:9 dots |
9 |
|
Narrow: Wide = 4:8 dots |
Narrow: Wide = 4:12 dots |
Docs
Tested printers
- Star TSP700
- Rongta RP80US
- Rongta RP326-USE
- EPSON TM-T88V
- Posman BTP-R880NP (Type "epson")
Character sets
- PC437_USA
- PC850_MULTILINGUAL
- PC860_PORTUGUESE
- PC863_CANADIAN_FRENCH
- PC865_NORDIC
- PC851_GREEK
- PC857_TURKISH
- PC737_GREEK
- ISO8859_7_GREEK
- WPC1252
- PC866_CYRILLIC2
- PC852_LATIN2
- SLOVENIA
- PC858_EURO
- WPC775_BALTIC_RIM
- PC855_CYRILLIC
- PC861_ICELANDIC
- PC862_HEBREW
- PC864_ARABIC
- PC869_GREEK
- ISO8859_2_LATIN2
- ISO8859_15_LATIN9
- PC1125_UKRANIAN
- WPC1250_LATIN2
- WPC1251_CYRILLIC
- WPC1253_GREEK
- WPC1254_TURKISH
- WPC1255_HEBREW
- WPC1256_ARABIC
- WPC1257_BALTIC_RIM
- WPC1258_VIETNAMESE
- KZ1048_KAZAKHSTAN
CHANGELOG
See CHANGELOG.md