react-native-zebra-bluetooth-printer
Getting started
$ npm install react-native-zebra-bluetooth-printer --save
Mostly automatic installation
$ react-native link react-native-zebra-bluetooth-printer
Note : For react-native > 0.59, don't use above command it uses auto-linking.
Manual installation
iOS
- In XCode, in the project navigator, right click
Libraries➜Add Files to [your project's name] - Go to
node_modules➜react-native-zebra-bluetooth-printerand addRNZebraBluetoothPrinter.xcodeproj - In XCode, in the project navigator, select your project. Add
libRNZebraBluetoothPrinter.ato your project'sBuild Phases➜Link Binary With Libraries - Run your project (
Cmd+R)<
Android
- Open up
android/app/src/main/java/[...]/MainActivity.java
- Add
import com.reactlibrary.RNZebraBluetoothPrinterPackage;to the imports at the top of the file - Add
new RNZebraBluetoothPrinterPackage()to the list returned by thegetPackages()method
- Append the following lines to
android/settings.gradle:include ':react-native-zebra-bluetooth-printer' project(':react-native-zebra-bluetooth-printer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-zebra-bluetooth-printer/android') - Insert the following lines inside the dependencies block in
android/app/build.gradle:compile project(':react-native-zebra-bluetooth-printer')
Update Android Manifest
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Usage
RNZebraBluetoothPrinter
RNZebraBluetoothPrinter is a module for Bluetooth management and supports print functionality for zebra bluetooth printers ( only ble devices ). It includes features like bluetooth enable/disable, pair/unpair a BLE/Bluetooth device, scan for nearby bluetooth devices and printing using bluetooth.
import RNZebraBluetoothPrinter from "react-native-zebra-bluetooth-printer";
- isEnabledBluetooth == > async function, check the status of bluetooth service in the bluetooth client(mobile phone) .Returns true if already enabled, false if not enabled.
RNZebraBluetoothPrinter.isEnabledBluetooth().then((res) => {
//do something with res
});
- enableBluetooth == > async function, Android: requests for bluetooth on/off permission on the android device. iOS: resolves to nil.
RNZebraBluetoothPrinter.enableBluetooth().then((res) => {
//do something with res
});
- disableBluetooth == > async function, Android: disables bluetooth if bluetooth is switched on. iOS: simply resolves by nil.
RNZebraBluetoothPrinter.disableBluetooth().then((res) => {
//do something with res
});
- scanDevices == > async function, scans for available nearby bluetooth devices for a specific period of time.
RNZebraBluetoothPrinter.scanDevices().then((deviceArray) => {
//do something with res
});
- pairedDevices == > async function, Android: returns already paired devices. iOS: resolves to nil.
RNZebraBluetoothPrinter.pairedDevices().then((deviceArray) => {
//do something with deviceArray
});
- connectDevice == > async function, for both android and iOS
RNZebraBluetoothPrinter.connectDevice(deviceAddress).then((res) => {
//do something with res
//for android, device address is mac address
//for iOS, device address is a long string like 0C347F9F-2881-9CCB-43B0-205976944626
});
- unpairDevice == > async function, Android: unpair/disconnect a paired device from paired device list.
RNZebraBluetoothPrinter.unpairDevice(deviceAddress).then((res) => {
//do something with res
});
iOS: function resolves to nil.
- print == > async function, prints specific zpl string from a zebra printer for both android and iOS. CPCL strings can also be printed using this for Android.
const zpl =
"^XA^FX Top section with company logo, name and address.^CF0,60^FO50,50^GB100,100,100^FS^ FO75,75 ^ FR ^ GB100, 100, 100 ^ FS^ FO88, 88 ^ GB50, 50, 50 ^ FS ^XZ";
Android
RNZebraBluetoothPrinter.print(deviceAddress, zpl).then((res) => {
//do something with res
});
iOS
RNZebraBluetoothPrinter.print(zpl).then((res) => {
//do something with res
});
- isConnected == > async function, returns a boolean value to indicate whether or not there is an open connection. For example :
Android
const isConnected = await RNZebraBluetoothPrinter.isConnected();
- getPrinterControlLanguage == > async function, returns a String containing the connected printer language. For example :
Android
const tags = {
ZPL: "...",
CPCL: "...",
PDF: "...",
};
const printerLanguage =
await RNZebraBluetoothPrinter.getPrinterControlLanguage();
await RNZebraBluetoothPrinter.print(tags[printerLanguage]);
Fast Print - [Android only]
You can control the start and end of the connection for faster printing. For this to work, you need to open the connection at the beginning of your code, and close it only at the end of the whole process. An example would be:
- I open the connection when starting the screen, print all the labels that are requested, and finally close the connection.
- The fastPrint function will print to the connected printer.
...
useEffect(() => {
const connectPrinter = async (device) => {
await RNZebraBluetoothPrinter.connect(device.address);
}
if(device){
connectPrinter(device);
}
return () => RNZebraBluetoothPrinter.disconnect();
}, [device])
...
const printTags = async (quantity) => {
for(let i=0; i<quantity; i++){
await RNZebraBluetoothPrinter.fastPrint("...");
}
}
...