@brooons/react-native-bluetooth-escpos-printer
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.5 • Public • Published

    @brooons/react-native-bluetooth-escpos-printer

    Cloned and changed from https://github.com/januslo/react-native-bluetooth-escpos-printer

    npm version

    React-Native plugin for the bluetooth ESC/POS & TSC printers.

    Any questions or bug please raise a issue.

    Features

    • Still under development
    • May support Android only
    • Typescript support

    Table of Contents

    Installation

    Step 1

    Install via NPM Check In NPM

    npm install @brooons/react-native-bluetooth-escpos-printer --save

    Step 2

    Link the plugin to your RN project

    react-native link @brooons/react-native-bluetooth-escpos-printer

    Manual linking (Android)

    Ensure your build files match the following requirements:

    1. (React Native 0.59 and lower) Define the react-native-bluetooth-escpos-printer project in android/settings.gradle:
    include ':react-native-bluetooth-escpos-printer'
    project(':react-native-bluetooth-escpos-printer').projectDir = new File(rootProject.projectDir, '../node_modules/@brooons/react-native-bluetooth-escpos-printer/android')
    
    1. (React Native 0.59 and lower) Add the react-native-bluetooth-escpos-printer as an dependency of your app in android/app/build.gradle:
    ...
    dependencies {
      ...
      implementation project(':react-native-bluetooth-escpos-printer')
    }
    
    1. (React Native 0.59 and lower) Add import cn.jystudio.bluetooth.RNBluetoothEscposPrinterPackage; and new RNBluetoothEscposPrinterPackage() in your MainApplication.java :

    Step 3

    Refers to your JS files

    import { BluetoothManager, BluetoothEscposPrinter, BluetoothTscPrinter } from '@brooons/react-native-bluetooth-escpos-printer';

    Usage and APIs

    BluetoothManager

    BluetoothManager is the module for Bluetooth service management, supports Bluetooth status check, enable/disable Bluetooth service, scan devices, connect/unpair devices.

    checkBluetoothEnabled(): Promise

    Async function, checks whether Bluetooth service is enabled.

    // TODO: consider to return the the devices information already bound and paired here..

    const isEnabled = await BluetoothManager.checkBluetoothEnabled();
    
    console.log(isEnabled); // true/false

    enableBluetooth(): Promise

    Async function, enables the bluetooth service, returns the devices information already bound and paired.

    const devices = await BluetoothManager.enableBluetooth();
    
    return devices
      .reduce((acc, device) => {
        try {
          return [...acc, JSON.parse(device)];
        } catch (e) {
          return acc;
        }
      }, [])
      .filter((device) => device.address);

    disableBluetooth(): Promise

    Async function, disables the bluetooth service.

    await BluetoothManager.disableBluetooth();

    scanDevices(): Promise

    Async function, scans the bluetooth devices, returns devices found and paired after scan finish. Event [BluetoothManager.EVENT_DEVICE_ALREADY_PAIRED] would be emitted with devices bound; event [BluetoothManager.EVENT_DEVICE_FOUND] would be emitted (many time) as long as new devices found.

    samples with events:

    DeviceEventEmitter.addListener(
      BluetoothManager.EVENT_DEVICE_ALREADY_PAIRED, (response) => {
        console.log(response);
        // response.devices would returns the paired devices array in JSON string.
      }
    );
    DeviceEventEmitter.addListener(
      BluetoothManager.EVENT_DEVICE_FOUND, (response) => {
        console.log(response);
        // response.devices would returns the found device object in JSON string
      }
    );

    Sample with scanDevices function

    const {
      found,
      paired,
    }: {
      found: Array<{ address: string; name?: string }>;
      paired: Device[];
    } = JSON.parse(await BluetoothManager.scanDevices());
    
    return {
      paired,
      found: found.filter((device) => !!device.name),
    };

    connect(address: string): Promise

    async function, connects the specified device, if not bound, bound dailog prompts.

    await BluetoothManager.connect(address);

    disconnect(address: string): Promise

    async function, disconnects the specified device.

    await BluetoothManager.disconnect(address);

    getConnectedDeviceAddress(): Promise

    async function, Return the address of the currently connected device .

    await BluetoothManager.getConnectedDeviceAddress();

    unpair(address: string): Promise

    async function, disconnects and unpairs the specified devices

    await BluetoothManager.unpair(address);

    Events of BluetoothManager module

    Name/KEY DESCRIPTION
    EVENT_DEVICE_ALREADY_PAIRED Emits the devices array already paired
    EVENT_DEVICE_DISCOVER_DONE Emits when the scan done
    EVENT_DEVICE_FOUND Emits when device found during scan
    EVENT_CONNECTION_LOST Emits when device connection lost
    EVENT_UNABLE_CONNECT Emits when error occurs while trying to connect device
    EVENT_CONNECTED Emits when device connected
    EVENT_BLUETOOTH_NOT_SUPPORT Emits when device not support bluetooth(android only)

    BluetoothTscPrinter

    The printer for label printing.

    printLabel(): Promise

    Async function that performs the label print action.

    await BluetoothTscPrinter.printLabel(options);
    Options
    interface IPrintLabelOptions {
      width?: number;
      height?: number;
      gap?: number;
      direction?: DIRECTION;
      reference?: [number, number];
      tear?: TEAR,
      sound?: number,
      text?: Array<{
        text: string;
        x: number;
        y: number;
        fonttype: FONTTYPE;
        rotation: ROTATION;
        xscal: FONTMUL;
        yscal: FONTMUL;
      }>;
      qrcode?: Array<{
        x: number;
        y: number;
        level: EEC;
        width: number;
        rotation: ROTATION;
        code: string;
      }>;
      barcode?: Array<{
        x: number;
        y: number;
        type: BARCODETYPE;
        height: number;
        readable: number;
        rotation: ROTATION;
        code: string;
      }>;
      image?: Array<{
        x: number;
        y: number;
        mode: BITMAP_MODE,
        width: number,
        image: string;
      }>;
    }
    Demo of printLabel()
    const base64Image = 'some_base_64';
    
    const options = {
      width: 40,
      height: 30,
      gap: 20,
      direction: BluetoothTscPrinter.DIRECTION.FORWARD,
      reference: [0, 0],
      tear: BluetoothTscPrinter.TEAR.ON,
      sound: 0,
      text: [
        {
          text: 'I am a testing txt',
          x: 20,
          y: 0,
          fonttype: BluetoothTscPrinter.FONTTYPE.SIMPLIFIED_CHINESE,
          rotation: BluetoothTscPrinter.ROTATION.ROTATION_0,
          xscal:BluetoothTscPrinter.FONTMUL.MUL_1,
          yscal: BluetoothTscPrinter.FONTMUL.MUL_1,
        },
        {
          text: '你在说什么呢?',
          x: 20,
          y: 50,
          fonttype: BluetoothTscPrinter.FONTTYPE.SIMPLIFIED_CHINESE,
          rotation: BluetoothTscPrinter.ROTATION.ROTATION_0,
          xscal:BluetoothTscPrinter.FONTMUL.MUL_1,
          yscal: BluetoothTscPrinter.FONTMUL.MUL_1,
        },
      ],
      qrcode: [
        {
          x: 20,
          y: 96,
          level: BluetoothTscPrinter.EEC.LEVEL_L,
          width: 3,
          rotation: BluetoothTscPrinter.ROTATION.ROTATION_0,
          code: 'show me the money',
        },
      ],
      barcode: [
        {
          x: 120,
          y: 96,
          type: BluetoothTscPrinter.BARCODETYPE.CODE128,
          height: 40,
          readable: 1,
          rotation: BluetoothTscPrinter.ROTATION.ROTATION_0,
          code: '1234567890',
        },
      ],
      image: [
        {
          x: 160,
          y: 160,
          mode: BluetoothTscPrinter.BITMAP_MODE.OVERWRITE,
          width: 60,
          image: base64Image,
        },
      ],
    };

    BluetoothEscposPrinter

    the printer for receipt printing, following ESC/POS command.

    printerInit(): Promise

    Init the printer.

    printAndFeed(feed: number): Promise

    Printer the buffer data and feed (feed lines).

    printerLeftSpace(space: number): Promise

    Set the printer left spaces.

    printerLineSpace(space: number): Promise

    Set the spaces between lines.

    printerUnderLine(line: number): Promise

    Set the underline of the text.

    • 0 - off
    • 1 - on
    • 2 - deeper

    printerAlign(align: number): Promise

    Set the printer alignment.

    Constansts:

    • BluetoothEscposPrinter.ALIGN.LEFT
    • BluetoothEscposPrinter.ALIGN.CENTER
    • BluetoothEscposPrinter.ALIGN.RIGHT

    Does not work on printPic() method.

    printText(text: string, options: object): Promise

    Print text.

    Options as following:

    • encoding - text encoding, default GBK.
    • codepage - codepage using, default 0.
    • widthtimes - text font mul times in width, default 0.
    • heigthTimes - text font mul times in height, default 0.
    • fonttype - text font type, default 0.

    printColumn(columnWidths: Array, columnAligns: Array, columnTexts: Array, options: object: Promise

    Print texts in column, Parameters as following:

    • columnWidths - int arrays, configs the width of each column, calculate by english character length. ex:the width of "abcdef" is 5 ,the width of "中文" is 4.
    • columnAligns - arrays, alignment of each column, values is the same of printerAlign().
    • columnTexts - arrays, the texts of each colunm to print.
    • options - text print config options, the same of printText() options.

    setWidth(width: number): Promise

    Sets the width of the printer.

    Constansts:

    • BluetoothEscposPrinter.DEVICE_WIDTH.WIDTH_58
    • BluetoothEscposPrinter.DEVICE_WIDTH.WIDTH_80

    printPic(base64encodeStr: string, options: object): Promise

    Prints the image which is encoded by base64, without schema.

    Options contains the params that may use in printing pic: "width": the pic width, basic on devices width(dots,58mm-384); "left": the left padding of the pic for the printing position adjustment.

    selfTest(): Promise

    Printer self test.

    rotate(): Promise

    Sets the rotation of the line.

    setBlob(weight: number): Promise

    Sets blob of the line.

    printQRCode(content: string, size: number, correctionLevel: number): Promise

    Prints the QRCode.

    printBarCode(str: string, nType: number, nWidthX: number, nHeight: number, nHriFontType: number, nHriFontPosition: number): Promise

    Prints the barcode.

    cutOnePoint(): Promise

    Cut a paper.

    Demos of printing a receipt

    await BluetoothEscposPrinter.printerAlign(BluetoothEscposPrinter.ALIGN.CENTER);
    await BluetoothEscposPrinter.setBlob(0);
    await BluetoothEscposPrinter.printText("广州俊烨\n\r",{
      encoding: 'GBK',
      codepage: 0,
      widthtimes: 3,
      heigthtimes: 3,
      fonttype: 1,
    });
    await BluetoothEscposPrinter.setBlob(0);
    await BluetoothEscposPrinter.printText("销售单\n\r",{
      encoding: 'GBK',
      codepage: 0,
      widthtimes: 0,
      heigthtimes: 0,
      fonttype: 1,
    });
    await BluetoothEscposPrinter.printerAlign(BluetoothEscposPrinter.ALIGN.LEFT);
    await BluetoothEscposPrinter.printText("客户:零售客户\n\r",{});
    await BluetoothEscposPrinter.printText("单号:xsd201909210000001\n\r",{});
    await BluetoothEscposPrinter.printText("日期:"+(dateFormat(new Date(), "yyyy-mm-dd h:MM:ss"))+"\n\r",{});
    await BluetoothEscposPrinter.printText("销售员:18664896621\n\r",{});
    await BluetoothEscposPrinter.printText("--------------------------------\n\r",{});
    let columnWidths = [12,6,6,8];
    await BluetoothEscposPrinter.printColumn(columnWidths,
      [BluetoothEscposPrinter.ALIGN.LEFT,BluetoothEscposPrinter.ALIGN.CENTER,BluetoothEscposPrinter.ALIGN.CENTER,BluetoothEscposPrinter.ALIGN.RIGHT],
      ["商品",'数量','单价','金额'],{});
    await BluetoothEscposPrinter.printColumn(columnWidths,
      [BluetoothEscposPrinter.ALIGN.LEFT,BluetoothEscposPrinter.ALIGN.LEFT,BluetoothEscposPrinter.ALIGN.CENTER,BluetoothEscposPrinter.ALIGN.RIGHT],
      ["React-Native定制开发我是比较长的位置你稍微看看是不是这样?",'1','32000','32000'],{});
    await BluetoothEscposPrinter.printText("\n\r",{});
    await BluetoothEscposPrinter.printColumn(columnWidths,
      [BluetoothEscposPrinter.ALIGN.LEFT,BluetoothEscposPrinter.ALIGN.LEFT,BluetoothEscposPrinter.ALIGN.CENTER,BluetoothEscposPrinter.ALIGN.RIGHT],
      ["React-Native定制开发我是比较长的位置你稍微看看是不是这样?",'1','32000','32000'],{});
    await BluetoothEscposPrinter.printText("\n\r",{});
    await BluetoothEscposPrinter.printText("--------------------------------\n\r",{});
    await BluetoothEscposPrinter.printColumn([12,8,12],
      [BluetoothEscposPrinter.ALIGN.LEFT,BluetoothEscposPrinter.ALIGN.LEFT,BluetoothEscposPrinter.ALIGN.RIGHT],
      ["合计",'2','64000'],{});
    await BluetoothEscposPrinter.printText("\n\r",{});
    await BluetoothEscposPrinter.printText("折扣率:100%\n\r",{});
    await BluetoothEscposPrinter.printText("折扣后应收:64000.00\n\r",{});
    await BluetoothEscposPrinter.printText("会员卡支付:0.00\n\r",{});
    await BluetoothEscposPrinter.printText("积分抵扣:0.00\n\r",{});
    await BluetoothEscposPrinter.printText("支付金额:64000.00\n\r",{});
    await BluetoothEscposPrinter.printText("结算账户:现金账户\n\r",{});
    await BluetoothEscposPrinter.printText("备注:无\n\r",{});
    await BluetoothEscposPrinter.printText("快递单号:无\n\r",{});
    await BluetoothEscposPrinter.printText("打印时间:"+(dateFormat(new Date(), "yyyy-mm-dd h:MM:ss"))+"\n\r",{});
    await BluetoothEscposPrinter.printText("--------------------------------\n\r",{});
    await BluetoothEscposPrinter.printText("电话:\n\r",{});
    await BluetoothEscposPrinter.printText("地址:\n\r\n\r",{});
    await BluetoothEscposPrinter.printerAlign(BluetoothEscposPrinter.ALIGN.CENTER);
    await BluetoothEscposPrinter.printText("欢迎下次光临\n\r\n\r\n\r",{});
    await BluetoothEscposPrinter.printerAlign(BluetoothEscposPrinter.ALIGN.LEFT);
    await BluetoothEscposPrinter.cutOnePoint();

    Demo for opening the drawer

    BluetoothEscposPrinter.openDrawer(0, 250, 250);

    Install

    npm i @brooons/react-native-bluetooth-escpos-printer

    DownloadsWeekly Downloads

    234

    Version

    1.1.5

    License

    ISC

    Unpacked Size

    99.6 MB

    Total Files

    73

    Last publish

    Collaborators

    • brooons