nxtqs-thermal-printer-cordova-plugin
v1.1.0
Published
Cordova wrapper for ESC/POS Thermal Printer and Urovo/Gertec internal printer (GPOS820) support
Maintainers
Readme
Cordova Plugin for Thermal Printer's
This plugin is a wrapper for the Android library for ESC/POS Thermal Printer.
Install
Cordova
$ cordova plugin add nxtqs-thermal-printer-cordova-pluginIonic
$ ionic cordova plugin add nxtqs-thermal-printer-cordova-pluginCapacitor
$ npm install nxtqs-thermal-printer-cordova-plugin
$ npx cap syncDon'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.BLUETOOTH" />
<uses-permission android:name="android.permission.INTERNET" />Examples
Notice for TypeScript-Developers
You can easily import and use the ThermalPrinter plugin in your TypeScript-Projects.
import { ThermalPrinterPlugin } from "nxtqs-thermal-printer-cordova-plugin/src";
declare let ThermalPrinter: ThermalPrinterPlugin;And then use the following examples in your code.
Print via Internal Urovo/Gertec Printer (GPOS820)
Available since v1.1.0 — This printer type uses structured operations (text, QR codes, images, gaps) instead of formatted text strings. It communicates directly with the device's internal PrinterManager API.
Prerequisites:
- Device must have
android.device.PrinterManageravailable (typically Urovo/Gertec devices with GPOS820 or similar printers) - Permissions in
AndroidManifest.xml:<uses-permission android:name="smartpos.deviceservice.permission.Printer" /> <uses-permission android:name="android.permission.CLOUDPOS_PRINTER" />
Basic Usage:
ThermalPrinter.listPrinters(
{ type: "internal-urovo" },
function (printers) {
if (printers.length > 0) {
var printer = printers[0];
ThermalPrinter.printInternalUrovoPage(
{
type: "internal-urovo",
id: printer.id,
operations: [
{
type: "text",
value: "Hello World!",
size: "normal",
align: "center",
},
{
type: "qr",
value: "https://example.com",
size: 200,
},
{
type: "gap",
value: 20, // millimeters
},
],
},
function () {
console.log("Successfully printed!");
},
function (error) {
console.error("Printing error", error);
},
);
}
},
function (error) {
console.error("No printers found", error);
},
);Operation Types:
text: Print text with specified size and alignment
value: string (text to print)size: 'small' | 'normal' | 'title' | 'ticket'align: 'left' | 'center' | 'right'x: number (optional, horizontal offset in pixels)topGap: number (optional, gap before text in pixels)
qr: Print QR code
value: string (URL or data to encode)size: number (QR code size in pixels)x: number (optional, horizontal offset)topGap: number (optional, gap before QR in pixels)
image: Print image
value: string (base64 encoded image)x: number (optional, horizontal offset)topGap: number (optional, gap before image in pixels)
gap: Add vertical spacing
value: number (gap size in pixels)
Print via Bluetooth
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.
Print via TCP
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.
Print via USB (incl. listPrinters and requestPermissions)
- 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(printer, function() {
// Permission granted - We can print!
ThermalPrinter.printFormattedText({
type: 'usb',
id: printer.id,
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);
});listPrinters(data, successCallback, errorCallback)
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 |
printFormattedText(data, successCallback, errorCallback)
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 | Millimeter distance feed paper at the end | | [data.dotsFeedPaper] | number | Distance feed paper at the end | | data.text | string | Formatted text to be printed | | successCallback | function | Result on success | | errorCallback | function | Result on failure |
printFormattedTextAndCut(data, successCallback, errorCallback)
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 | Millimeter distance feed paper at the end | | [data.dotsFeedPaper] | number | Distance feed paper at the end | | data.text | string | Formatted text to be printed | | successCallback | function | Result on success | | errorCallback | function | Result on failure |
getEncoding(data, successCallback, errorCallback)
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 |
disconnectPrinter(data, successCallback, errorCallback)
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 |
requestPermissions(data, successCallback, errorCallback)
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 |
bitmapToHexadecimalString(data, successCallback, errorCallback)
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.base64 | string | Base64 encoded picture string to convert | | successCallback | function | Result on success | | errorCallback | function | Result on failure |
