This plugin is a wrapper for the Android library for ESC/POS Thermal Printer.
$ cordova plugin add @achyutlabsau/cordova-plugin-thermal-printer
Don't forget to add BLUETOOTH and INTERNET (for TCP) permissions and for USB printers the android.hardware.usb.host
feature to the AndroidManifest.xml
.
<uses-feature android:name="android.hardware.usb.host" />
<uses-permission android:name="android.permission.INTERNET" />
<!-- Request legacy Bluetooth permissions on older devices. -->
<uses-permission android:maxSdkVersion="30" android:name="android.permission.BLUETOOTH" />
<uses-permission android:maxSdkVersion="30" android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- Needed only if your app communicates with already-paired Bluetooth devices. -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- Needed only if your app looks for Bluetooth devices. If your app doesn't use Bluetooth scan
results to derive physical location information, you can strongly assert that your app doesn't
derive physical location. -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<!-- Needed only if your app makes the device discoverable to Bluetooth devices. -->
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
Run this for getting Bluetooth access permission if needed
const result = ThermalPrinter.requestBTPermissions();
// result
// {
// granted: boolean;
// BLUETOOTH: boolean;
// BLUETOOTH_ADMIN: boolean;
// BLUETOOTH_CONNECT: boolean;
// BLUETOOTH_SCAN: boolean;
// }
You can easily import and use the ThermalPrinter plugin in your TypeScript-Projects.
import { ThermalPrinterPlugin } from "@achyutlabsau/cordova-plugin-thermal-printer/src";
declare let ThermalPrinter: ThermalPrinterPlugin;
And then use the following examples in your code.
Printing via Bluetooth is as easy as possible.
ThermalPrinter.printFormattedText({
type: 'bluetooth',
id: 'first', // You can also use the identifier directly i. e. 00:11:22:33:44:55 (address) or name
text: '[C]<u><font size='big'>Hello World</font></u>' // new lines with "\n"
}, function() {
console.log('Successfully printed!');
}, function(error) {
console.error('Printing error', error);
});
Notice: If not working please ensure that you have the printer connected. (Settings -> Bluetooth -> Pairing)
If you have other issues maybe you have not granted the android.permission.BLUETOOTH
permission.
Printing via TCP is as easy as possible.
ThermalPrinter.printFormattedText({
type: 'tcp',
address: '192.168.1.123',
port: 9100,
id: 'tcp-printer-001', // Use an unique identifier for each printer i. e. address:port or name
text: '[C]<u><font size='big'>Hello World</font></u>' // new lines with "\n"
}, function() {
console.log('Successfully printed!');
}, function(error) {
console.error('Printing error', error);
});
Notice: If not working please ensure that your device can ping the printer. And the printer must be a POSPrinter! Also ensure that you're using the correct port. 9100 is default for the thermal printers.
- First we get our printer because we don't know the printer's ID.
- Then we request permissions for printing. This is needed because Android will not allow us to access all devices.
- And finally we can print with our device.
ThermalPrinter.listPrinters({type: 'usb'}, function(printers) {
if (printers.length > 0) {
var printer = printers[0];
ThermalPrinter.requestPermissions({type: 'usb', id: printer.deviceId}, function() {
// Permission granted - We can print!
ThermalPrinter.printFormattedText({
type: 'usb',
id: printer.deviceId,
text: '[C]<u><font size='big'>Hello World</font></u>' // new lines with "\n"
}, function() {
console.log('Successfully printed!');
}, function(error) {
console.error('Printing error', error);
});
}, function(error) {
console.error('Permission denied - We can\'t print!');
});
} else {
console.error('No printers found!');
}
}, function(error) {
console.error('Ups, we cant list the printers!', error);
});
List available printers
Param | Type | Description |
---|---|---|
data | Object |
Data object |
data.type |
"bluetooth" | "usb"
|
Type of list: bluetooth or usb |
successCallback | function |
Result on success |
errorCallback | function |
Result on failure |
Print a formatted text and feed paper
See: https://github.com/DantSu/ESCPOS-ThermalPrinter-Android#formatted-text--syntax-guide
Param | Type | Description |
---|---|---|
data | Array.<Object> |
Data object |
data.type |
"bluetooth" | "tcp" | "usb"
|
List all bluetooth or usb printers |
[data.id] |
string | number
|
ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
[data.address] | string |
If type is "tcp" then the IP Address of the printer |
[data.port] | number |
If type is "tcp" then the Port of the printer |
[data.mmFeedPaper] |
number optional
|
Millimeter distance feed paper at the end |
[data.dotsFeedPaper] |
number optional
|
Distance feed paper at the end |
[data.printerDpi] |
number optional
|
Printer DPI |
[data.printerWidthMM] |
number optional
|
Paper Width in mm |
[data.printerNbrCharactersPerLine] |
number optional
|
Number of characters per line |
data.text | string |
Formatted text to be printed |
successCallback | function |
Result on success |
errorCallback | function |
Result on failure |
Print a formatted text, feed paper and cut the paper
See: https://github.com/DantSu/ESCPOS-ThermalPrinter-Android#formatted-text--syntax-guide
Param | Type | Description |
---|---|---|
data | Array.<Object> |
Data object |
data.type |
"bluetooth" | "tcp" | "usb"
|
List all bluetooth or usb printers |
[data.id] |
string | number
|
ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
[data.address] | string |
If type is "tcp" then the IP Address of the printer |
[data.port] | number |
If type is "tcp" then the Port of the printer |
[data.mmFeedPaper] |
number optional
|
Millimeter distance feed paper at the end |
[data.dotsFeedPaper] |
number optional
|
Distance feed paper at the end |
[data.printerDpi] |
number optional
|
Printer DPI |
[data.printerWidthMM] |
number optional
|
Paper Width in mm |
[data.printerNbrCharactersPerLine] |
number optional
|
Number of characters per line |
data.text | string |
Formatted text to be printed |
successCallback | function |
Result on success |
errorCallback | function |
Result on failure |
Get the printer encoding when available
Param | Type | Description |
---|---|---|
data | Array.<Object> |
Data object |
data.type |
"bluetooth" | "tcp" | "usb"
|
List all bluetooth or usb printers |
[data.id] |
string | number
|
ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
[data.address] | string |
If type is "tcp" then the IP Address of the printer |
[data.port] | number |
If type is "tcp" then the Port of the printer |
successCallback | function |
Result on success |
errorCallback | function |
Result on failure |
Close the connection with the printer
Param | Type | Description |
---|---|---|
data | Array.<Object> |
Data object |
data.type |
"bluetooth" | "tcp" | "usb"
|
List all bluetooth or usb printers |
[data.id] |
string | number
|
ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
[data.address] | string |
If type is "tcp" then the IP Address of the printer |
[data.port] | number |
If type is "tcp" then the Port of the printer |
successCallback | function |
Result on success |
errorCallback | function |
Result on failure |
Request permissions for USB printers
Param | Type | Description |
---|---|---|
data | Array.<Object> |
Data object |
data.type |
"bluetooth" | "tcp" | "usb"
|
List all bluetooth or usb printers |
[data.id] |
string | number
|
ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
[data.address] | string |
If type is "tcp" then the IP Address of the printer |
[data.port] | number |
If type is "tcp" then the Port of the printer |
successCallback | function |
Result on success |
errorCallback | function |
Result on failure |
Request permissions for bluetooth
Param | Type | Description |
---|---|---|
data | Array.<Object> |
Data object |
data.type | "bluetooth" |
List all bluetooth or usb printers |
successCallback | function |
Result on success |
errorCallback | function |
Result on failure |
Convert Drawable instance to a hexadecimal string of the image data
Param | Type | Description |
---|---|---|
data | Array.<Object> |
Data object |
data.type |
"bluetooth" | "tcp" | "usb"
|
List all bluetooth or usb printers |
[data.id] |
string | number
|
ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
[data.address] | string |
If type is "tcp" then the IP Address of the printer |
[data.port] | number |
If type is "tcp" then the Port of the printer |
[data.mmFeedPaper] |
number optional
|
Millimeter distance feed paper at the end |
[data.dotsFeedPaper] |
number optional
|
Distance feed paper at the end |
[data.printerDpi] |
number optional
|
Printer DPI |
[data.printerWidthMM] |
number optional
|
Paper Width in mm |
data.base64 | string |
Base64 encoded picture string to convert |
successCallback | function |
Result on success |
errorCallback | function |
Result on failure |
Convert Drawable instance to a hexadecimal string of the large image data
Param | Type | Description |
---|---|---|
data | Array.<Object> |
Data object |
data.type |
"bluetooth" | "tcp" | "usb"
|
List all bluetooth or usb printers |
[data.id] |
string | number
|
ID of printer to find (Bluetooth: address, TCP: Use address + port instead, USB: deviceId) |
[data.address] | string |
If type is "tcp" then the IP Address of the printer |
[data.port] | number |
If type is "tcp" then the Port of the printer |
[data.mmFeedPaper] |
number optional
|
Millimeter distance feed paper at the end |
[data.dotsFeedPaper] |
number optional
|
Distance feed paper at the end |
[data.printerDpi] |
number optional
|
Printer DPI |
[data.printerWidthMM] |
number optional
|
Paper Width in mm |
data.base64 | string |
Base64 encoded picture string to convert |
successCallback | function |
Result on success |
errorCallback | function |
Result on failure |