Service DatecsPrinter for ionic 4 - giorgiofellipe/cordova-plugin-datecs-printer GitHub Wiki
datecsprinter.service.ts
import { Injectable } from '@angular/core';
declare let window: any;
@Injectable({
providedIn: 'root'
})
export class DatecsPrinter {
DatecsPrinter: any;
constructor() {
console.log('Hello DatecsPrinter Provider');
}
async listBluetoothDevices (){
return new Promise((resolve, reject) => {
window.DatecsPrinter.listBluetoothDevices(
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
connect(address:string){
return new Promise((resolve, reject) => {
window.DatecsPrinter.connect(address,
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
disconnect(){
return new Promise((resolve, reject) => {
window.DatecsPrinter.disconnect(
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
feedPaper(lines:number = 1){
return new Promise((resolve, reject) => {
window.DatecsPrinter.feedPaper(lines,
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
printText (text:string, charset:string = 'ISO-8859-1'){
return new Promise((resolve, reject) => {
window.DatecsPrinter.printText( text,
charset,
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
setBarcode (align, small, scale, hri, height) {
return new Promise((resolve, reject) => {
window.DatecsPrinter.setBarcode(
align,
small,
scale,
hri,
height,
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
printBarcode(data = '1234445775', type = 73) {
return new Promise((resolve, reject) => {
window.DatecsPrinter.printBarcode(
type,
data,
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
getStatus(){
return new Promise((resolve, reject) => {
window.DatecsPrinter.getStatus(
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
getTemperature(){
return new Promise((resolve, reject) => {
window.DatecsPrinter.getTemperature(
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
printImage (image:string, height:number, width:number, align = 0){
return new Promise((resolve, reject) => {
window.DatecsPrinter.printImage(
image,
height,
width,
align,
function (success) {
resolve(success);
},
function (error) {
reject(error);
});
});
}
/*! canvas-to-bmp version 1.0 ALPHA
(c) 2015 Ken "Epistemex" Fyrstenberg
MIT License (this header required)
*/
public CanvasToBMP = {
/**
* Convert a canvas element to ArrayBuffer containing a BMP file
* with support for 32-bit (alpha).
*
* Note that CORS requirement must be fulfilled.
*
* @param {HTMLCanvasElement} canvas - the canvas element to convert
* @return {ArrayBuffer}
*/
toArrayBuffer: function(canvas) {
var w = canvas.width,
h = canvas.height,
w4 = w * 4,
idata = canvas.getContext("2d").getImageData(0, 0, w, h),
data32 = new Uint32Array(idata.data.buffer), // 32-bit representation of canvas
stride = Math.floor((32 * w + 31) / 32) * 4, // row length incl. padding
pixelArraySize = stride * h, // total bitmap size
fileLength = 122 + pixelArraySize, // header size is known + bitmap
file = new ArrayBuffer(fileLength), // raw byte buffer (returned)
view = new DataView(file), // handle endian, reg. width etc.
pos = 0, x, y = 0, p, s = 0, a, v;
// write file header
setU16(0x4d42); // BM
setU32(fileLength); // total length
pos += 4; // skip unused fields
setU32(0x7a); // offset to pixels
// DIB header
setU32(108); // header size
setU32(w);
setU32(-h >>> 0); // negative = top-to-bottom
setU16(1); // 1 plane
setU16(32); // 32-bits (RGBA)
setU32(3); // no compression (BI_BITFIELDS, 3)
setU32(pixelArraySize); // bitmap size incl. padding (stride x height)
setU32(2835); // pixels/meter h (~72 DPI x 39.3701 inch/m)
setU32(2835); // pixels/meter v
pos += 8; // skip color/important colors
setU32(0xff0000); // red channel mask
setU32(0xff00); // green channel mask
setU32(0xff); // blue channel mask
setU32(0xff000000); // alpha channel mask
setU32(0x57696e20); // " win" color space
// bitmap data, change order of ABGR to BGRA
while (y < h) {
p = 0x7a + y * stride; // offset + stride x height
x = 0;
while (x < w4) {
v = data32[s++]; // get ABGR
a = v >>> 24; // alpha channel
view.setUint32(p + x, (v << 8) | a); // set BGRA
x += 4;
}
y++
}
return file;
// helper method to move current buffer position
function setU16(data) {view.setUint16(pos, data, true); pos += 2}
function setU32(data) {view.setUint32(pos, data, true); pos += 4}
},
/**
* Converts a canvas to BMP file, returns a Blob representing the
* file. This can be used with URL.createObjectURL().
* Note that CORS requirement must be fulfilled.
*
* @param {HTMLCanvasElement} canvas - the canvas element to convert
* @return {Blob}
*/
toBlob: function(canvas) {
return new Blob([this.toArrayBuffer(canvas)], {
type: "image/bmp"
});
},
/**
* Converts the canvas to a data-URI representing a BMP file.
* Note that CORS requirement must be fulfilled.
*
* @param canvas
* @return {string}
*/
toDataURL: function(canvas) {
var buffer = new Uint8Array(this.toArrayBuffer(canvas)),
bs = "", i = 0, l = buffer.length;
while (i < l) bs += String.fromCharCode(buffer[i++]);
return "data:image/bmp;base64," + btoa(bs);
}
};
}
Add service Put in the app.module.ts @NgModule providers array.
@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
IonicStorageModule.forRoot()
],
providers: [
StatusBar,
SplashScreen,
**DatecsPrinter**,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]
})
On page :
Import service
import { DatecsPrinter } from '../datecsprinter.service';'
add to constructor
constructor(private DatecsPrinter:DatecsPrinter ) {
}
Use like this :
public MyPrintText(text, charset ){
this.DatecsPrinter.printText( text,charset).then(result => {
console.log(JSON.stringify(result));
}).catch(err => {
alert(JSON.stringify(err));
});
}