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)); });

}

⚠️ **GitHub.com Fallback** ⚠️