B4A Library SD EscPos Printer (Lan,USB, Bluetooth SPP, BLE)

This library allows you to print with thermal printers compatible with the ESC POS language in 4 different communication channels (USB, Bluetooth SPP, BLE, LAN)
you can download the ble3 library from here

The DEMO version prints one minute every 2. The full version of the library will be issued to those making a donation (Contact me in private before making a donation)

WARNING: Make sure the library meets all your needs, is compatible with the printer you need to use.

For ESC/POS B4J version see Here
For ESC/POS B4i version see Here
For ZEBRA printer see Here


Those who want a different version, such as LAN, USB, NFC please contact me privately.
OSBluetooth SPPBLE (Beacon)USB LAN / WIFI RS 232 NFC
Androidxxxx
iOsxx (on request)
Windowxx (on request)x (on request)

To print a PDF with ESC/POS see



SD_EscPosPrinter

Author:
Star-Dust
Version: 1.08
  • BLE_Printer
    • Events:
      • BLEoff
      • Connected (services As List)
      • Disconnected
      • ImageWriteComplete
      • PrinterFound (Name As String, ID As String)
      • StateChanged (msg As String)
      • WriteComplete (Characteristic As String, Success As Boolean)
    • Fields:
      • CharatteristicName As String
      • Charset As String
      • currentState As Int
      • ServiceName As String
    • Functions:
      • AddTab (ArrayTab As Int()) As String
        Add Tab
        eg. PrinterBLE.AddTab(Array As Byte(100,150,121))
      • Beep (Times As Byte, SecondsDurate As Byte) As String
        .Printer.Beep(1..9,1..9)
      • CenterJustify As String
        after this command calls SendBufferToPrinter
      • Class_Globals As String
      • Connect (ID As String) As String
      • Disconnect As String
      • Initialize (CallBack As Object, EventName As String) As String
        Initializes the object. You can add parameters to this method if needed.
      • InitializePrinter As String
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • LeftJustify As String
        after this command calls SendBufferToPrinter
      • PrintBitmap (bmp As Bitmap)
      • RightJustify As String
        after this command calls SendBufferToPrinter
      • ScanPrinter As String
      • SetCodePage (Code As Byte) As String
        es. Printer.SetCodePage(06) for umlauts char
      • Write (Text As String) As String
        Write (Print) a Text
      • Write_ArrayByte (B As Byte()) As String
        Write (Send to Printer) a Array of Byte
        eg. PrinterBLE.Write_ArrayByte(Array As Byte(0x1D,150,23))
        eg. PrinterBLE.Write_ArrayByte("Text".GetBytes("UTF8"))
      • WriteBarCode (Code As String) As String
      • WriteBarCode2D (Code As String) As String
      • WriteLine (Text As String) As String
        Write (Print) a Text + CHLF
      • WriteList (list As List) As String
        Write (Print) a List
    • Properties:
      • CodeTable
        es. printer.setCodeTable(Encoding.Code_WPC1252)
        aftet this command calls SendBufferToPrinter
      • isConnect As Boolean [read only]
      • isScanning As Boolean [read only]
      • Spacing
        after setSpacing command calls SendBufferToPrinter
  • BT_Printer
    Note: AddPermission(android.permission.ACCESS_COARSE_LOCATION)
    • Events:
      • BluetoothIsDisabled
      • ConnectedToPrint (Success As Boolean)
      • DataReceived (Buffer() As Byte)
      • DisconnectToPrint (Mac As String)
      • DiscoveryComplete (Printers As Map)
      • DiscoveryFinished
      • DiscoveryNewPrinter (PrintedFound As Map, DeviceClass As Int)
      • DiscoveryNoDeviceFound
      • ErrorDiscovery
      • ListPrinterAssociated (ListNameAndMac As Map)
      • SendingError (Mac As String)
      • SendTerminated
    • Fields:
      • Charset As String
      • Const_AUDIO_VIDEO As Int
      • Const_COMPUTER As Int
      • Const_HEALTH As Int
      • Const_IMAGING As Int
      • Const_MISC As Int
      • Const_NETWORKING As Int
      • Const_PERIPHERAL As Int
      • Const_PHONE As Int
      • Const_TOY As Int
      • Const_UNCATEGORIZED As Int
      • Const_WEARABLE As Int
    • Functions:
      • AddBuffer_ArrayByte (B As Byte()) As String
      • AddBuffer_BarCode (Code As String) As String
      • AddBuffer_BarCode2D (Code As String) As String
      • AddBuffer_Bitmap (Bmp As Bitmap, ShiftLeft As Int) As String
      • AddBuffer_BitmapAlternativeCoding (Bmp As Bitmap) As String
      • AddBuffer_List_Write (list As List) As String
      • AddBuffer_List_WriteLine (list As List) As String
      • AddBuffer_Tab (ArrayTab As Int()) As String
      • AddBuffer_Write (Text As String) As String
      • AddBuffer_WriteLine (Text As String) As String
      • AddPrintDefineImage As String
      • Beep (Times As Byte, SecondsDurate As Byte) As String
        .Printer.Beep(1..9,1..9)
      • CenterJustify As String
        after this command calls SendBufferToPrinter
      • Class_Globals As String
      • ClearBuffer As String
      • Connected As Boolean
      • ConnectFromMac (Mac As String) As String
      • DefineImage (Image As Bitmap)
      • Disconnect As String
      • flushAllAndClose
      • Initialize (CallBack As Object, EventName As String) As String
        Initializes the object. You can add parameters to this method if needed.
      • InitializePrinter As String
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • LeftJustify As String
        after this command calls SendBufferToPrinter
      • Preview As Bitmap
      • ResetPreViewWidth (NewWidth As Int) As String
      • RightJustify As String
        after this command calls SendBufferToPrinter
      • SearchFromAssociatedPrinter As String
      • SearchNewPrinter As String
        select --------------------------------------------
      • SendBufferToPrinter
      • SetCodePage (Code As Byte) As String
        es. Printer.SetCodePage(06) for umlauts char
      • WriteBarCode (Code As String) As String
        send to print immediately, do not preview - Not available in the demo version
      • WriteBarCode2D (Code As String) As String
        send to print immediately, do not preview - Not available in the demo version
      • WriteBitmap (Bmp As Bitmap) As String
        send to print immediately, do not preview - Not available in the demo version
      • WriteByte (Data As Byte()) As String
        send to print immediately, do not preview - Not available in the demo version
      • WriteText (Text As String) As String
        send to print immediately, do not preview - Not available in the demo version
    • Properties:
      • CodeTable
        es. printer.setCodeTable(Encoding.Code_WPC1252)
        aftet this command calls SendBufferToPrinter
      • Spacing
        after setSpacing command calls SendBufferToPrinter
  • ESC_POS
    Code module
    Subs in this code module will be accessible from all modules.
    • Fields:
      • BoldOff As String
      • BoldOn As String
      • cn_PDF417 As String
      • cn_QRcode As String
      • CutPaper As String
      • CutPartialPaper As String
      • CutTotalPaper As String
      • Demo As Boolean
      • DoubleOff As String
      • DoubleOn As String
      • FontA_Bold As String
      • FontA_DoubleHight As String
      • FontA_DoubleWide As String
      • FontA_DoubleWideHeight As String
      • FontA_Normal As String
      • FontB_Bold As String
      • FontB_DoubleHeight As String
      • FontB_DoubleWide As String
      • FontB_DoubleWideHeight As String
      • FontB_Normal As String
      • Horizzontal As String
      • InitializePrinter As String
      • ItalicFontOff As String
      • ItalicFontOn As String
      • NoUnderline As String
      • QueryErrorCauses As String
      • QueryOfflineCauses As String
      • QueryPaperStatus As String
      • QueryPrinterStatus As String
      • Underline1 As String
      • Underline2 As String
      • Vertical As String
    • Functions:
      • feed (lines As Int) As String
      • Process_Globals As String
  • Encoding
    Code module
    Subs in this code module will be accessible from all modules.
    • Fields:
      • CharSet_Chinese As String
      • CharSet_ChineseS As String
      • CharSet_DOS_Latin_1 As String
      • CharSet_IBM_PC As String
      • CharSet_ISO8859 As String
      • CharSet_UTF8 As String
      • CharSet_Windows1252 As String
      • Code_PC437 As Int
      • Code_PC850 As Int
      • Code_PC857 As Int
      • Code_PC858 As Int
      • Code_PC860 As Int
      • Code_PC863 As Int
      • Code_PC865 As Int
      • Code_PC866 As Int
      • Code_WPC1252 As Int
    • Functions:
      • Process_Globals As String
  • LAN_Printer
    • Events:
      • Connected (Success As Boolean)
      • DataReceived (Data() As Byte)
      • Diconnected
      • ErrorTrasmission
    • Fields:
      • Charset As String
    • Functions:
      • AddTab (ArrayTab As Int()) As String
        Add Tab
        eg. PrinterBLE.AddTab(Array As Byte(100,150,121))
      • Beep (Times As Byte, SecondsDurate As Byte) As String
        .Printer.Beep(1..9,1..9)
      • CenterJustify As String
        after this command calls SendBufferToPrinter
      • Class_Globals As String
      • Connect (Host As String, Port As Int) As String
      • Disconnect As String
      • Initialize (CallBack As Object, EventName As String) As String
        Initializes the object. You can add parameters to this method if needed.
      • InitializePrinter As String
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • LanConnection_Connected (Successful As Boolean) As String
      • LeftJustify As String
        after this command calls SendBufferToPrinter
      • PrintBitmap (bmp As Bitmap) As String
      • RightJustify As String
        after this command calls SendBufferToPrinter
      • SetCodePage (Code As Byte) As String
        es. Printer.SetCodePage(06) for umlauts char
      • Write (Text As String) As String
        Write (Print) a Text
      • Write_ArrayByte (B As Byte()) As String
        Write (Send to Printer) a Array of Byte
        eg. PrinterBLE.Write_ArrayByte(Array As Byte(0x1D,150,23))
        eg. PrinterBLE.Write_ArrayByte("Text".GetBytes("UTF8"))
      • WriteBarCode (Code As String) As String
      • WriteBarCode2D (Code As String) As String
      • WriteLine (Text As String) As String
        Write (Print) a Text + CHLF
      • WriteList (list As List) As String
        Write (Print) a List
    • Properties:
      • CodeTable
        es. printer.setCodeTable(Encoding.Code_WPC1252)
        aftet this command calls SendBufferToPrinter
      • Spacing
        after setSpacing command calls SendBufferToPrinter
  • RS_Printer
    • Fields:
      • Charset As String
    • Functions:
      • AddTab (ArrayTab As Int()) As String
        Add Tab
        eg. PrinterBLE.AddTab(Array As Byte(100,150,121))
      • Beep (Times As Byte, SecondsDurate As Byte) As String
        .Printer.Beep(1..9,1..9)
      • CenterJustify As String
        after this command calls SendBufferToPrinter
      • Class_Globals As String
      • Connect (SerialDevOutput As String) As String
        es. Connect("/dev/ttyAMA1")
        es. Connect("/dev/ttyS0")
      • Disconnect As String
      • Initialize (CallBack As Object, EventName As String) As String
        Initializes the object. You can add parameters to this method if needed.
      • InitializePrinter As String
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • LeftJustify As String
        after this command calls SendBufferToPrinter
      • PrintBitmap (bmp As Bitmap) As String
      • RightJustify As String
        after this command calls SendBufferToPrinter
      • SetCodePage (Code As Byte) As String
        es. Printer.SetCodePage(06) for umlauts char
      • Write (Text As String) As String
        Write (Print) a Text
      • Write_ArrayByte (B As Byte()) As String
        Write (Send to Printer) a Array of Byte
        eg. PrinterBLE.Write_ArrayByte(Array As Byte(0x1D,150,23))
        eg. PrinterBLE.Write_ArrayByte("Text".GetBytes("UTF8"))
      • WriteBarCode (Code As String) As String
      • WriteBarCode2D (Code As String) As String
      • WriteLine (Text As String) As String
        Write (Print) a Text + CHLF
      • WriteList (list As List) As String
        Write (Print) a List
    • Properties:
      • CodeTable
        es. printer.setCodeTable(Encoding.Code_WPC1252)
        aftet this command calls SendBufferToPrinter
      • Spacing
        after setSpacing command calls SendBufferToPrinter
  • USB_Printer
    • Events:
      • WriteComplete
    • Fields:
      • Charset As String
    • Functions:
      • AddTab (ArrayTab As Int()) As String
        Add Tab
        eg. PrinterBLE.AddTab(Array As Byte(100,150,121))
      • Beep (Times As Byte, SecondsDurate As Byte) As String
        .Printer.Beep(1..9,1..9)
      • CenterJustify As String
        after this command calls SendBufferToPrinter
      • Class_Globals As String
      • CloseConnection As String
      • FindAdbDevice As Boolean
      • HasPermission As Boolean
      • Initialize (CallBack As Object, EventName As String) As String
        Initializes the object. You can add parameters to this method if needed.
      • InitializePrinter As String
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • LeftJustify As String
        after this command calls SendBufferToPrinter
      • OpenConnection As String
      • PrintBitmap (bmp As Bitmap) As String
      • RequestPermission As String
      • RightJustify As String
        after this command calls SendBufferToPrinter
      • SetCodePage (Code As Byte) As String
        es. Printer.SetCodePage(06) for umlauts char
      • Write (Text As String) As String
        Write (Print) a Text
      • Write_ArrayByte (D As Byte()) As String
        Write (Send to Printer) a Array of Byte
        eg. PrinterBLE.Write_ArrayByte(Array As Byte(0x1D,150,23))
        eg. PrinterBLE.Write_ArrayByte("Text".GetBytes("UTF8"))
      • WriteBarCode (Code As String) As String
      • WriteBarCode2D (Code As String) As String
      • WriteLine (Text As String) As String
        Write (Print) a Text + CHLF
      • WriteList (list As List) As String
        Write (Print) a List
    • Properties:
      • CodeTable
        es. printer.setCodeTable(Enoding.Code_WPC1252)
        aftet this command calls SendBufferToPrinter
      • Spacing
        after setSpacing command calls SendBufferToPrinter


log release
  • 1.04
    • Added CutPartialPaper, CutTotalPaper and feed(lines As Int) in esc_pos.
    • Added WriteBitmap WriteByte WriteText - send to print immediately
  • 1.05
    • Added conversions of color images to black and white for printing
  • 1.06
    • fixed LAN classbug
  • 1.07
    • Added Beep method
  • 1.08
    • Added WriteBarCode, WriteBarCode2D and for Printer_BT also added AddBarCode2d. Other commands to print 2D barcodes compatible with some POS ESCs
 

Attachments

  • SD_EscPosPrinter 1.08.zip
    47.3 KB · Views: 605
Last edited:

George_G

Member
Licensed User
As has already been answered in the other section of the forum, you have to set the Code Page for Greek (one of these 7,65,66,67,68) but mainly the printer must support the code page.

You have to do the tests
In my case, the best solution is to create a bitmap, and print it.
 

lkching7

Member
Licensed User
Longtime User
Can connect to the virtual Bluetooth printer ?
The virtual Bluetooth printer is without MAC Address. The only way is connect by UUID
 

Star-Dust

Expert
Licensed User
Longtime User
Thank
 

Olli73

Member
Licensed User
Longtime User
I try to use this it with "EPSON TM-m30III", connected by lan
The sample work for me.... sometimes.....
If I disconnect the connection (connected by lan) by checking the radiobutton "Disconnect All", and if I want to connect again, I get Lan_Connected = false everytime. I have to restart the activity.
Is it because of the limitations in Demo Libraries?

And how can I change the Charset? I need a Charset for printing "ö, ä, ü ....". But L_Printer.SetCodePage(6) dont work for me... the printed letter changed, but it is not an "Ö"....
 

Star-Dust

Expert
Licensed User
Longtime User
If you use disconnect to reopen the channels you must reinitialize the class.

For CharSet use CodeTable and SetCodePage
 

Olli73

Member
Licensed User
Longtime User
Hello! I have problems with the timing of sending to my Epson printer - connected by lan. If I stop manually by a breakpoint, it is printing. Without breakpoint, it is not printing.... I think, I dont understand the timing of the printer? I need to make a pause? Without, sometimes the printer print only parts of the lines.... Is "sleeping" the right way to do it?

B4X:
If LanConnected Then
       
        Dim n As Nachricht = myNachricht
       
        L_Printer.CenterJustify
        L_Printer.Writeline(ESC_POS.DoubleOn & "TICKET" & ESC_POS.DoubleOff)
        L_Printer.WriteLine(ESC_POS.feed(2))
        L_Printer.LeftJustify
        Sleep(500)
        Dim byteList As List = TextToWPC1252(n.Textnachricht) 'Encode a string to WPC1252 Byte Array'
       
        For Each bstr() As Byte In byteList '!!! If make a breakpoint in Debug - it is printing - without breakpoint it is not printing'
            L_Printer.Write_ArrayByte(bstr)
            L_Printer.Write(CRLF)
            Sleep(100)
        Next
       
        L_Printer.WriteLine(ESC_POS.feed(2))
        byteList = TextToWPC1252(n.Absender)
        For Each bstr() As Byte In byteList
            L_Printer.Write_ArrayByte(bstr)
            L_Printer.Write(CRLF)
        Next
        L_Printer.WriteLine(n.Datum)
        L_Printer.WriteLine(ESC_POS.feed(2))
        L_Printer.WriteLine(ESC_POS.feed(2))
        L_Printer.WriteLine(ESC_POS.CutPartialPaper)
       
        Sleep(200)
           
    End If
 

Star-Dust

Expert
Licensed User
Longtime User
I can't quite understand what you're describing.
But you seem to say that if you go into debug and stop it prints but in release mode the printer seems to be waiting for data.

This can happen if the streaming system waits for more data before sending, perhaps thinking it can fill the cache. Usually you should force the flush.
But to make a maneuver like this you have to be sure that this is the problem.

for further explanations see this link
 

Star-Dust

Expert
Licensed User
Longtime User
NEW
Starting from SDK33 runtime permissions are required for accessing Bluetooth, see this link
 
Top