JavaScript library to translate subset of HTML into commands which would be executed on the thermal printer.
Library is based on the popular node-thermal-printer module which provides adapters for EPSON and STAR thermal printers command line printing.
Compare the code in HTML and direct commands for printer.
HTML:
<center>
<p>dsdasdas</p>
<div style="font-weight: bold">oneone</div>
</center>
Direct JS commands:
printer.alignCenter()
printer.print('dsdasdas')
printer.newLine()
printer.bold(true)
printer.print('oneone')
printer.bold(true)
printer.newLine()
printer.alignLeft()
HTML code version:
- allows to create preview of what will be printed in the browser
- makes code more readable
- reduces integration time
npm install html2thermal node-thermal-printer
Linux requires build-essentials
sudo apt-get install build-essential
Library exports 2 functions:
convert(xml, characterSet = 'SLOVENIA')
convertsxml
to the thermal printer commands.xml
as XML code to be converted to commandscharacterSet
execute(printer, xml, isCut = true)
executes the commands on the thermal printer.printer
as an instance of the printer from the node-thermal-printerxml
as XML code to be executed on the thermal printerisCut
defines if cut operation should be executed at the end of the printing process
<beep/>
perform sound of an internal beeper if present<br/>
breaks the line (new line)<b>...</b>
sets text bold<center>...</center>
aligns text to center<left>...</left>
aligns text to left<right>...</right>
aligns text to right<leftRight left="..." right="..."/>
print text in one line align left and align right<cut />
cuts the paper if printer supports it<partialcut />
cuts the paper and leaves the bridge in the middle if printer supports it<div>...</div>
isolates content on the separate line<p>...</p>
isolates content on the separate line<doubleheight>...</doubleheight>
sets text to double height<u>...</u>
sets underline to the text<ud>...</ud>
sets double underline or thick to the text<doublewidth>...</doublewidth>
sets text to double width<fonta>...</fonta>
changes text font to the first supported (A or default)<fontb>...</fontb>
changes text font to the second supported (B)<textsize width="..." height="...."/>
changes text size<hr />
draws the line-separator<img src="..." height="..." width="..." />
prints the image from src (file:
,http:
,https:
,data:
, ...), width and height in pixels are optional<invert>...</invert>
inverts background and foreground colors<normal>...</normal>
resets all text settings to normal, redundant operation<opencashdrawer />
opens cash drawer if present<code128 data="..." />
prints code128 bar code with data provided in the data property<qrcode data="..." />
prints QR code with data provided in the data property<quadarea>...</quadarea>
sets text to quad area<rotate180>...</rotate180>
prints content upside down<table>...</table>
table<tr>...</tr>
table row<td width="..." align="..." bold="..." style="...">...<td>
cell of the table row,width
property is optional and in factor (0.5
,0.25
, ...),align
property is optional (left
,right
,center
),bold
property is optional (true
),style
property is optional
font-style: bold
sets text bold (NOTE: no support for number value yet)
If no tag provided, then print
operation will be executed.
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
const { ThermalPrinter, PrinterTypes, CharacterSet, BreakLine } = require('node-thermal-printer');
const execute = require('../src/execute')
const convert = require('../src/convert/index');
const options = {
type: PrinterTypes.EPSON,
interface: '//computerName/printerName', //or your interface
characterSet: CharacterSet.PC852_LATIN2,
removeSpecialCharacters: false,
lineCharacter: " ",
breakLine: BreakLine.WORD,
options:{
timeout: 6000
},
}
const printer = new ThermalPrinter(options);
const template = `
<div>hello world</div>
<p>it is</p>
<p>me
me</p>
`
execute(printer, template);
HTML2Thermal is MIT licenсed.