Android Library Based ESC/POS Thermal Printer
Based : ESC/POS Thermal Printer
Step 1. Add the JitPack repository to your build file. Add it in your root /build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency in /app/build.gradle :
dependencies {
...
implementation 'com.github.novandikp:SimpleThermalPrinter:v1.1'
}
In making a receipt or other required several formats. With this library you can create easily.
Step 1. Initialize Class
PrintTextBuilder resultPrint = new PrintTextBuilder();Step 2. Add Text
resultPrint.addTitle("Faktur Penjualan");
resultPrint.addDivider();
resultPrint.addTextPair("Pelanggan","Novandi Kevin Pratama");
resultPrint.addTextPair("Faktur","000001");
resultPrint.addDivider();
for (int i = 0; i < 3; i++) {
ColumnPrinter columnNama = new ColumnPrinter("Baju Korea Keren");
ColumnPrinter columnSubHarga = new ColumnPrinter("12.000", AlignColumn.RIGHT);
resultPrint.addColumn(columnNama, columnSubHarga);
resultPrint.addText("x2");
resultPrint.addEnter();
}
resultPrint.addDivider();
resultPrint.addTextPair("Total","40.000", AlignColumn.RIGHT);We can add Title, Text, Text Pair, Divider, and Table with method of PrintTextBuilder
Be sure your project has permission in AndroidManifest.xml
android.permission.BLUETOOTHandroid.permission.BLUETOOTH_ADMINandroid.permission.BLUETOOTH_CONNECTandroid.permission.BLUETOOTH_SCANandroid.permission.ACCESS_COARSE_LOCATIONandroid.permission.ACCESS_FINE_LOCATION
This sample code for requsting permission
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.printertesting">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="false" />
Request Permission
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, FINE_LOCATION);
}else if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, COARSE_LOCATION);
}else if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.BLUETOOTH}, PERMISSION_BLUETOOTH);
} else if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_ADMIN) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.BLUETOOTH_ADMIN}, PERMISSION_BLUETOOTH_ADMIN);
} else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S && ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.BLUETOOTH_CONNECT}, PERMISSION_BLUETOOTH_CONNECT);
} else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S && ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.BLUETOOTH_SCAN}, PERMISSION_BLUETOOTH_SCAN);
} else {
// Code
}PrinterBTContext printerBTContext = PrinterBTContext.getInstance(this, resultPrint);To initialize need parameter Context and PrintTextBuilder
printerBTContext.discoveryDevice(new PrinterBTContext.OnScanDevice() {
@Override
public void onScanStart() {
// Code when start example loading dialog showing
}
@Override
public void onScanCompleted(List<DeviceBT> devices) {
// Code when scan is complete example close loading dialog
}
});printerBTContext.getListBluetoothDevice()getListBluetoothDevice() will return List<DeviceBT>
DeviceBT has 3 property :
- String name
- String address
- BluetoothConnection connection
printerBTContext.connectDevice(deviceBT,new PrinterBTContext.OnConnect() {
@Override
public void onConnect(State_Bluetooth state_bt) {
// Code
}
});DeviceBT is required parameter for connect printer can get from getListBluetoothDevice().
State_Bluetooth is enum
- NONE
- CONNECTED
- PAIRED
- BOUNDING
- ERROR_BOUNDED
- NOTCONNECTED
-
getDeviceName()Return Device Name Connected
-
print()For Print Text
-
isEnabled()Return is Bluetooth Enabled or Disabled
-
isConnectedDevice()Return is device connected
PrinterUSBContext printerUSBContext = PrinterUSBContext.getInstance(this, resultPrint);;To initialize need Context and PrintTextBuilder
printerUSBContext.print();Always call removeReceiver() onDestroy
@Override
protected void onDestroy() {
super.onDestroy();
printerUSBContext.removeReceiver();
}For Default all printer set 58mm, to set another size you can set with function setTypePrinter
printerBTContext.setTypePrinter(Printer58mm.device());
printerUSBContext.setTypePrinter(Printer76mm.device());To make custom size you can make like this
public class PrinterA5 implements TypePrinter
{
public static PrinterA5 printerA5;
public static PrinterA5 device(){
if(PrinterA5.printerA5 == null){
PrinterA5.printerA5 = new PrinterA5();
}
return PrinterA5.printerA5;
}
@Override
public float getPrinterWidth() {
return 160f;
}
@Override
public int getPrinterDPI() {
return 231;
}
@Override
public int getMaxCharColumns() {
return 50;
}
}So you can call your custom size simply
printerUSBContext.setTypePrinter(PrinterA5.device());