Skip to content

Instantly share code, notes, and snippets.

@razmans
Created February 12, 2021 14:34
Show Gist options
  • Save razmans/ad2c266b18edb35b9d37a8f6b252d506 to your computer and use it in GitHub Desktop.
Save razmans/ad2c266b18edb35b9d37a8f6b252d506 to your computer and use it in GitHub Desktop.
import { Injectable } from '@angular/core';
import { Plugins } from '@capacitor/core';
import { BluetoothService } from './bluetooth.service';
import {MutableBuffer} from 'mutable-buffer';
// import { EscTranslatorService } from './service/esc-translator.service';
@Injectable({
providedIn: 'root'
})
export class PrintService {
buff=new MutableBuffer(1024,1024);
constructor(
public bluetooth:BluetoothService,
// public esc:EscTranslatorService
) {
}
async storePrinter(mac)
{
const { Storage } = Plugins;
await Storage.set({
key:'printer',
value:mac
})
}
getPrinter()
{
const { Storage } = Plugins;
return new Promise(async (resolve)=>{
const ret=await Storage.get({key:'printer'});
resolve(ret.value);
})
}
async deletePrinter()
{
const { Storage } = Plugins;
await Storage.remove({ key: 'printer' });
}
testPrint(mac)
{
this.bluetooth.testPrint(mac);
}
async print_data(address,dataabc:any=[])
{
console.log('address and data',address,dataabc)
return new Promise(async (resolve, reject)=>{
// // let CMD=this.esc.getData();
await this.buff.flush();
await this.buff.clear();
let CMD=await {
LF: '\x0a',
ESC: '\x1b',
FS: '\x1c',
GS: '\x1d',
US: '\x1f',
FF: '\x0c',
DLE: '\x10',
DC1: '\x11',
DC4: '\x14',
EOT: '\x04',
NUL: '\x00',
EOL: '\n',
FEED_CONTROL_SEQUENCES: {
CTL_LF: '\x0a', // Print and line feed
CTL_FF: '\x0c', // Form feed
CTL_CR: '\x0d', // Carriage return
CTL_HT: '\x09', // Horizontal tab
CTL_VT: '\x0b', // Vertical tab
},
LINE_SPACING: {
LS_DEFAULT: '\x1b\x32',
LS_SET: '\x1b\x33'
},
HARDWARE: {
HW_INIT: '\x1b\x40', // Clear data in buffer and reset modes
HW_SELECT: '\x1b\x3d\x01', // Printer select
HW_RESET: '\x1b\x3f\x0a\x00', // Reset printer hardware
},
CASH_DRAWER: {
CD_KICK_2: '\x1b\x70\x00', // Sends a pulse to pin 2 []
CD_KICK_5: '\x1b\x70\x01', // Sends a pulse to pin 5 []
},
MARGINS: {
BOTTOM: '\x1b\x4f', // Fix bottom size
LEFT: '\x1b\x6c', // Fix left size
RIGHT: '\x1b\x51', // Fix right size
},
PAPER: {
PAPER_FULL_CUT: '\x1d\x56\x00', // Full cut paper
PAPER_PART_CUT: '\x1d\x56\x01', // Partial cut paper
PAPER_CUT_A: '\x1d\x56\x41', // Partial cut paper
PAPER_CUT_B: '\x1d\x56\x42', // Partial cut paper
},
TEXT_FORMAT: {
TXT_NORMAL: '\x1b\x21\x00', // Normal text
TXT_2HEIGHT: '\x1b\x21\x10', // Double height text
TXT_2WIDTH: '\x1b\x21\x20', // Double width text
TXT_4SQUARE: '\x1b\x21\x30', // Double width & height text
TXT_CUSTOM_SIZE: function(width, height) { // other sizes
var widthDec = (width - 1) * 16;
var heightDec = height - 1;
var sizeDec = widthDec + heightDec;
return '\x1d\x21' + String.fromCharCode(sizeDec);
},
TXT_HEIGHT: {
1: '\x00',
2: '\x01',
3: '\x02',
4: '\x03',
5: '\x04',
6: '\x05',
7: '\x06',
8: '\x07'
},
TXT_WIDTH: {
1: '\x00',
2: '\x10',
3: '\x20',
4: '\x30',
5: '\x40',
6: '\x50',
7: '\x60',
8: '\x70'
},
TXT_UNDERL_OFF: '\x1b\x2d\x00', // Underline font OFF
TXT_UNDERL_ON: '\x1b\x2d\x01', // Underline font 1-dot ON
TXT_UNDERL2_ON: '\x1b\x2d\x02', // Underline font 2-dot ON
TXT_BOLD_OFF: '\x1b\x45\x00', // Bold font OFF
TXT_BOLD_ON: '\x1b\x45\x01', // Bold font ON
TXT_ITALIC_OFF: '\x1b\x35', // Italic font ON
TXT_ITALIC_ON: '\x1b\x34', // Italic font ON
TXT_FONT_A: '\x1b\x4d\x00', // Font type A //normal font
TXT_FONT_B: '\x1b\x4d\x01', // Font type B //small font
TXT_FONT_C: '\x1b\x4d\x02', // Font type C //normal font
TXT_ALIGN_LT: '\x1b\x61\x00', // Left justification
TXT_ALIGN_CT: '\x1b\x61\x01', // Centering
TXT_ALIGN_RT: '\x1b\x61\x02', // Right justification
},
BARCODE_FORMAT: {
BARCODE_TXT_OFF: '\x1d\x48\x00', // HRI barcode chars OFF
BARCODE_TXT_ABV: '\x1d\x48\x01', // HRI barcode chars above
BARCODE_TXT_BLW: '\x1d\x48\x02', // HRI barcode chars below
BARCODE_TXT_BTH: '\x1d\x48\x03', // HRI barcode chars both above and below
BARCODE_FONT_A: '\x1d\x66\x00', // Font type A for HRI barcode chars
BARCODE_FONT_B: '\x1d\x66\x01', // Font type B for HRI barcode chars
BARCODE_HEIGHT: function(height) { // Barcode Height [1-255]
return '\x1d\x68' + String.fromCharCode(height);
},
// Barcode Width [2-6]
BARCODE_WIDTH: {
1: '\x1d\x77\x02',
2: '\x1d\x77\x03',
3: '\x1d\x77\x04',
4: '\x1d\x77\x05',
5: '\x1d\x77\x06',
},
BARCODE_HEIGHT_DEFAULT: '\x1d\x68\x64', // Barcode height default:100
BARCODE_WIDTH_DEFAULT: '\x1d\x77\x01', // Barcode width default:1
BARCODE_UPC_A: '\x1d\x6b\x00', // Barcode type UPC-A
BARCODE_UPC_E: '\x1d\x6b\x01', // Barcode type UPC-E
BARCODE_EAN13: '\x1d\x6b\x02', // Barcode type EAN13
BARCODE_EAN8: '\x1d\x6b\x03', // Barcode type EAN8
BARCODE_CODE39: '\x1d\x6b\x04', // Barcode type CODE39
BARCODE_ITF: '\x1d\x6b\x05', // Barcode type ITF
BARCODE_NW7: '\x1d\x6b\x06', // Barcode type NW7
BARCODE_CODE93: '\x1d\x6b\x48', // Barcode type CODE93
BARCODE_CODE128: '\x1d\x6b\x49', // Barcode type CODE128
},
CODE2D_FORMAT: {
TYPE_PDF417: '\x1b\x5a\x00',
TYPE_DATAMATRIX: '\x1b\x5a\x01',
TYPE_QR: '\x1b\x5a\x02',
CODE2D: '\x1b\x5a',
},
IMAGE_FORMAT: {
S_RASTER_N: '\x1d\x76\x30\x00', // Set raster image normal size
S_RASTER_2W: '\x1d\x76\x30\x01', // Set raster image double width
S_RASTER_2H: '\x1d\x76\x30\x02', // Set raster image double height
S_RASTER_Q: '\x1d\x76\x30\x03', // Set raster image quadruple
},
BITMAP_FORMAT: {
BITMAP_S8: '\x1b\x2a\x00',
BITMAP_D8: '\x1b\x2a\x01',
BITMAP_S24: '\x1b\x2a\x20',
BITMAP_D24: '\x1b\x2a\x21'
},
GSV0_FORMAT: {
GSV0_NORMAL: '\x1d\x76\x30\x00',
GSV0_DW: '\x1d\x76\x30\x01',
GSV0_DH: '\x1d\x76\x30\x02',
GSV0_DWDH: '\x1d\x76\x30\x03'
}
};
// let printData:any;
let the_time_buff=new Date(Number(dataabc.timestamp));
let month_buff=Number(the_time_buff.getMonth())+1;
let time_minutes_buff=the_time_buff.getMinutes();
let time_minutes;
if(Number(time_minutes_buff)<10)
{
time_minutes="0"+time_minutes_buff.toString();
}
else
{
time_minutes=time_minutes_buff.toString();
}
let date=the_time_buff.getDate()+"-"+month_buff+"-"+the_time_buff.getFullYear();
let time=the_time_buff.getHours()+":"+time_minutes;
let total=0;
this.buff.write(CMD.TEXT_FORMAT.TXT_ALIGN_CT);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_ON);
this.buff.write(CMD.TEXT_FORMAT.TXT_NORMAL);
this.buff.write(CMD.TEXT_FORMAT.TXT_FONT_A);
this.buff.write("SIXTY BITES BURGER");
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_OFF);
this.buff.write(CMD.TEXT_FORMAT.TXT_FONT_A);
this.buff.write("TTDI");
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF); //2 lines
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_ON);
this.buff.write("CUSTOMER NAME: "+dataabc.cust_name);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_OFF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write("--------------------------")
if(dataabc.method=='delivery')
{
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_ON);
this.buff.write(dataabc.address);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_OFF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write("--------------------------")
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_ON);
this.buff.write("TEL: "+dataabc.cust_tel);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_OFF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write("--------------------------")
}
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_ON);
this.buff.write("ORDER NO: "+dataabc.order_number);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_OFF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write("DATE: "+date);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write("TIME: "+time);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_ON);
this.buff.write(dataabc.payment_status);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_OFF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write("--------------------------")
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
if(dataabc.items_list.length==1)
{
this.buff.write(CMD.TEXT_FORMAT.TXT_4SQUARE)
this.buff.write(dataabc.items_list[0].food_code)
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
if(dataabc.items_list[0].add_on_item.length>0)
{
for(var y=0;y<dataabc.items_list[0].add_on_item.length;y++)
{
this.buff.write(CMD.TEXT_FORMAT.TXT_4SQUARE)
this.buff.write("+"+dataabc.items_list[0].add_on_item[y].name);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
}
}
this.buff.write(CMD.TEXT_FORMAT.TXT_NORMAL)
this.buff.write("RM "+Number(dataabc.items_list[0].price).toFixed(2));
total=total+Number(dataabc.items_list[0].price);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
}
else if(dataabc.items_list.length>1)
{
for(var x=0;x<dataabc.items_list.length;x++)
{
this.buff.write(CMD.TEXT_FORMAT.TXT_4SQUARE)
this.buff.write(dataabc.items_list[x].food_code)
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
if(dataabc.items_list[x].add_on_item.length>0)
{
for(var y=0;y<dataabc.items_list[x].add_on_item.length;y++)
{
this.buff.write(CMD.TEXT_FORMAT.TXT_4SQUARE)
this.buff.write("+"+dataabc.items_list[x].add_on_item[y].name);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
}
}
this.buff.write(CMD.TEXT_FORMAT.TXT_NORMAL)
this.buff.write("RM "+Number(dataabc.items_list[x].price).toFixed(2));
total=total+Number(dataabc.items_list[x].price);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
}
}
this.buff.write("--------------------------")
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write("TOTAL")
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_ON);
this.buff.write(CMD.TEXT_FORMAT.TXT_FONT_A);
this.buff.write("RM "+Number(total).toFixed(2));
this.buff.write(CMD.TEXT_FORMAT.TXT_BOLD_OFF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write("--------------------------")
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
this.buff.write(CMD.FEED_CONTROL_SEQUENCES.CTL_LF);
// printData=printData+CMD.TEXT_FORMAT.TXT_ALIGN_CT;
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_ON;
// printData=printData+CMD.TEXT_FORMAT.TXT_NORMAL;
// printData=printData+CMD.TEXT_FORMAT.TXT_FONT_A;
// printData=printData+"SIXTY BITES BURGER";
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF;
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_OFF
// printData=printData+CMD.TEXT_FORMAT.TXT_FONT_A
// printData=printData+"TTDI"
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_ON
// printData=printData+"CUSTOMER NAME: "+dataabc.cust_name
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_OFF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+"--------------------------"
// if(dataabc.method=='delivery')
// {
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_ON
// printData=printData+dataabc.address
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_OFF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+"--------------------------"
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_ON
// printData=printData+"TEL: "+dataabc.cust_tel
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_OFF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+"--------------------------"
// }
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_ON
// printData=printData+"ORDER NO: "+dataabc.order_number
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_OFF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+"DATE: "+date
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+"TIME: "+time
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_ON
// printData=printData+"PAYMENT STATUS: "+dataabc.payment_status
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_OFF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+"--------------------------"
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// for(var x=0;x<dataabc.items_list.length;x++)
// {
// printData=printData+CMD.TEXT_FORMAT.TXT_4SQUARE
// printData=printData+dataabc.items_list[x].food_code
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// if(dataabc.items_list[x].add_on_item)
// {
// for(var y=0;y<dataabc.items_list[x].add_on_item.length;y++)
// {
// printData=printData+CMD.TEXT_FORMAT.TXT_4SQUARE
// printData=printData+"+"+dataabc.items_list[x].add_on_item[y].name;
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// }
// }
// }
// printData=printData+"--------------------------"
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+"TOTAL"
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_ON
// printData=printData+CMD.TEXT_FORMAT.TXT_FONT_A
// printData=printData+"RM "+Number(total).toFixed(2)
// printData=printData+CMD.TEXT_FORMAT.TXT_BOLD_OFF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+"--------------------------"
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
// printData=printData+CMD.FEED_CONTROL_SEQUENCES.CTL_LF
await this.bluetooth.connectBT(address)
.subscribe(item_printer=>{
this.bluetooth.bt.write(this.buff.buffer)
.then(async dataz=>{
console.log("WRITE SUCCESS",dataz);
await this.buff.flush();
await this.buff.clear();
this.bluetooth.disconnectPrinter();
resolve(1);
});
},err=>{
console.log("ERROR",err);
this.buff.clear();
this.bluetooth.disconnectPrinter();
reject(0);
})
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment