Spanish Imprimir tiquete desde b4a en impresora Bluetooth portatil

jmorales

Member
Licensed User
Longtime User
Muy buenos dias, ante todo gracias por su tiempo

Estamos desarrollando un programa de toma de pedidos en b4a y necesitamos imprimir el pedido o tiquete, la aplicacion trabaja desconectada y es muy posible que al momento de imprimir NO se tenga internet.

Si me pudieran ayudar con dos cosas porque puedo escoger el modelo a usar

1. Alguna printer que me recomienden que no de muchos problemas.

2. Me pueden recomentar alguna libreria, que no dependa de tener internet.

Muchas gracias y saludos desde Costa Rica
 

dar2o3

Active Member
Licensed User
Longtime User
Hola, yo te recomendaría que uses pdfjet, es una librería con la que puedes crear archarchivos pdf al tamaño que quieras, una vez creado el pdf cada marca de impresora suele tener su propia app en el market para imprimir, seleccionas el pdf creado y listo, una vez que controlas pdfjet resulta mucho más fácil que intentar imprimir en la impresora directamente.
 

jmorales

Member
Licensed User
Longtime User
Muchas Gracias dar2o3 lo voy a probar, pero tengo una duda, yo armo el archivo pdf en eso estoy claro pero puedo desde la aplicacion mandarlo a imprimir ? algo parecido a un shell o como ?


Muy buen dia
 

dar2o3

Active Member
Licensed User
Longtime User
No estoy en casa y escribo desde el móvil pero te dejo el Link, bajate el ejemplo y ahí puedes ver como abrir el pdf desde la aplicación una vez creado.
 

benji

Active Member
Licensed User
Longtime User
yo uso una impresora termica bluetooth, si te interesa avisame, te paso el modelo y el codigo que uso para imprimir.
 
  • Like
Reactions: aja

Manuel Eras Larios

Member
Licensed User
Longtime User
AYUDA, quien puede ayudarme, tengo una aplicación para facturar. El problema es que en algunas ocasiones la impresión del ticket sale desordenada. por ejemplo se imprime en la primer linea el monto facturado, y luego salen los encabezados, pero en otras ocasiones sale bien. les dejo aqui el código que uso

Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
End Sub

Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.

Private btAdmin As BluetoothAdmin
Private cmp20 As Serial
Private PrintBuffer As String
'Private ast As AsyncStreamsText
Private Toggla As Toggle
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("ConsFacturas")
Activity.Title = "Consulta de Facturas"

btAdmin.Initialize("admin")
cmp20.Initialize("printer")
Toggla.TurnBluetoothOn
End Sub

Sub Activity_Resume
Toggla.TurnBluetoothOn
End Sub

Sub Activity_Pause (UserClosed As Boolean)
Toggla.TurnBluetoothOff
End Sub

Sub Activity_KeyPress(KeyCode As Int) As Boolean
If KeyCode = KeyCodes.KEYCODE_BACK Then
cmp20.Disconnect
Toggla.TurnBluetoothOff

Activity.Finish
End If
End Sub

Sub btnImprimir_Click
StartPrinter
End Sub

Sub StartPrinter
Dim PairedDevices As Map
Dim L As List
Dim Res As Int

ToastMessageShow("Imprimiendo ...",True)

PairedDevices.Initialize

Try
PairedDevices = cmp20.GetPairedDevices
Catch
Msgbox("Emparejando con la impresora ...","Error de Impresora")
cmp20.Disconnect
End Try

If PairedDevices.Size = 0 Then
Msgbox("Error Conectando con la impresora - No encontrada ...","")
Return
End If

If PairedDevices.Size = 1 Then
Try
cmp20.ConnectInsecure(btAdmin,PairedDevices.Get(PairedDevices.GetKeyAt(0)),1)
Catch
Msgbox("Conectando ...","Error de Impresora")

cmp20.Disconnect
End Try
Else
L.Initialize

For i = 0 To PairedDevices.Size - 1
L.Add(PairedDevices.GetKeyAt(i))
Next

Res = InputList(L, "Seleccione un Dispositivo", -1)

If Res <> DialogResponse.CANCEL Then
cmp20.Connect(PairedDevices.Get(L.Get(Res)))
End If
End If
End Sub

Sub Printer_Connected (Success As Boolean)
If Success Then

CreaTxT
ImprimirTxT

Msgbox("Impresión finalizada!","")

cmp20.Disconnect
Else
If Msgbox2("", "Error de Impresora ","ReImprimir","Cancelar","",Null) = DialogResponse.POSITIVE Then
StartPrinter
End If
End If
End Sub


Sub ImprimirTxT
Private ast As AsyncStreamsText

ast.Initialize(Me, "ast", cmp20.InputStream, cmp20.OutputStream)

Private TextReader1 As TextReader
TextReader1.Initialize(File.OpenInput(Modulo.ruta, "ConsFacturas.txt"))

Private Linea As String
Linea = TextReader1.ReadLine

Do While Linea <> Null
Log(Linea) 'write the line to LogCat
Linea = TextReader1.ReadLine

If Linea <> Null Then
ast.Write(Linea & Modulo.cr) ' Print 1 row for each tablerow
End If
Loop

TextReader1.Close
ast.Close
End Sub

Sub ast_Error
ToastMessageShow("Conexión perdida.", True)
End Sub

Sub ast_Terminated
Log("Conexión terminada.")
End Sub
 

aviario

Active Member
Licensed User
Longtime User
Te paso el código que yo uso para los autoventas y que funciona bien normalmente los autoventas usan una impresora start matricial ya que permite papel con copias en el veras que hay comandos diferentes si es para una start o otra impresora que no sea matricial
 

Attachments

  • imprimenota.pdf
    150.3 KB · Views: 802

benji

Active Member
Licensed User
Longtime User
disculpas por lo tarde, estaba de vacaciones...
aqui dejo el codigo para que lo vean...
en este post, esta el main de un ejemplo que hice para pruebas... esta es la definicion del uso de la impresora, conexion y administracion del bluetooth
en el siguiente post, la impresion.

Main:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    '******************
    
    Dim admin As BluetoothAdmin
    Dim serial1 As Serial
    Dim foundDevices As List
    Type NameAndMac (Name As String, Mac As String)
    Dim connectedDevice As NameAndMac
    
    '******************
    Dim IngresoPatente As String
    Dim IngresoFecha As String
    Dim IngresoHora As String
    Dim DBMain As SQL
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private btnIngreso As Button
    Private btnHora As Button
    Private btnPatente As Button
    Private btnImpresora As Button
    Private btnReporte As Button
    
    Private btnLavado As Button
    Private btnRptLavado As Button
    Private Label6 As Label
    Private Label7 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Matriz")
    If FirstTime Then
        admin.Initialize("admin")
        serial1.Initialize("serial1")
    End If
    If File.Exists(File.DirRootExternal,"cardamar.s3db") = False Then
        Msgbox("Se copia","Copiando...")
        File.Copy(File.DirAssets,"cardamar.s3db",File.DirRootExternal,"cardamar.s3db")
    End If
    DBMain.Initialize(File.DirRootExternal,"cardamar.s3db",False)
    Activity.Title = "Central Estacionamiento"
End Sub

Sub Activity_Resume
    If admin.IsEnabled = False Then
        If admin.Enable = False Then
            ToastMessageShow("Error al Conectar Bluetooth", True)
        Else
            ToastMessageShow("Conectando Impresora Bluetooth...", False)
            'the StateChanged event will be soon raised
        End If
    Else
        Admin_StateChanged(admin.STATE_ON, 0)
    End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    If UserClosed = True Then
        serial1.Disconnect
    End If
    StopService(iPrint)
End Sub

Sub Admin_StateChanged (NewState As Int, OldState As Int)
    btnImpresora.Enabled = (NewState = admin.STATE_ON)
End Sub


Sub btnIngreso_Click
    StartActivity(Ingreso)
End Sub
Sub btnHora_Click
    StartActivity(Hora)
End Sub
Sub btnPatente_Click
    StartActivity(Patente)
End Sub
Sub btnImpresora_Click
    foundDevices.Initialize
    If admin.StartDiscovery    = False Then
        ToastMessageShow("Error en la busqueda", True)
    Else
        ProgressDialogShow("Buscando Impresora...")
    End If
End Sub

Sub Admin_DiscoveryFinished
    ProgressDialogHide
    If foundDevices.Size = 0 Then
        ToastMessageShow("No se encontraron dispositivos, Repita la Busqueda...", True)
    Else
        Dim l As List
        l.Initialize
        For i = 0 To foundDevices.Size - 1
            Dim nm As NameAndMac
            nm = foundDevices.Get(i)
            l.Add(nm.Name)
        Next
        Dim res As Int
        res = InputList(l, "Elija el dispositivo a conectar", -1)
        If res <> DialogResponse.CANCEL Then
            connectedDevice = foundDevices.Get(res)
            ProgressDialogShow("Trying to connect to: " & connectedDevice.Name & " (" & connectedDevice.Mac & ")")
            serial1.Connect(connectedDevice.Mac)
        End If
    End If
End Sub

Sub Admin_DeviceFound (Name As String, MacAddress As String)
    Log(Name & ":" & MacAddress)
    Dim nm As NameAndMac
    nm.Name = Name
    nm.Mac = MacAddress
    foundDevices.Add(nm)
    ProgressDialogShow("Buscando Dispositivo (~ Dispositivo Encontrado)...".Replace("~", foundDevices.Size))
End Sub

Sub Serial1_Connected (Success As Boolean)
    ProgressDialogHide
    Log("connected: " & Success)
    If Success = False Then
        Log(LastException.Message)
        ToastMessageShow("Error connecting: " & LastException.Message, True)
    Else
    '    Activity.Finish
        btnImpresora.Enabled = True
        btnIngreso.Enabled = True
        btnHora.Enabled = True
        btnPatente.Enabled = True
        StartService(iPrint)
    End If
End Sub
Sub btnReporte_Click
    StartActivity(Reporte)
End Sub

Sub btnLavado_Click
    StartActivity(Venta)
End Sub
Sub btnRptLavado_Click
    StartActivity(RptCar)
End Sub
 

benji

Active Member
Licensed User
Longtime User
Impresion Hora + Codigo Barra:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim Conv As ByteConverter
    Dim AuxIn As String
    Dim AuxOut As String
    Dim AuxMin As String
    Dim AuxDescto As String
    Dim auxTarifa As String
    Dim AuxValor As String
    Dim AuxStr As String
    Private lblFecha As Label
    Private Button1 As Button
    Private btnSalir As Button
    Dim bc As cls_barcode
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("Hora")
    Activity.Title = "Hora Ingreso"
    bc.Initialize
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub



Sub Button1_Click
    Dim str1,str2,str3,str4,str5,str6,str7,str8 As String
    Dim str1Byte(),str2Byte(),str3Byte(),str4Byte(),str5Byte(),str6Byte(),str7Byte(),str8Byte() As Byte
    Dim CodeByte(),CodeByte2(),CodeByte3() As Byte
    Dim strbyte(3) As Byte
    Dim strbyte2(1) As Byte
    Dim strbyte3(3) As Byte
    Dim strbyte4(2) As Byte
    Dim ByteBig(4) As Byte
    Dim BWByte(3) As Byte
    Dim HoraStr As String
    Dim CodeBelow1(3), CodeBelow2(4),CodeBelow3(3),CodeBelow4(3),CodeBelow5(11) As Byte
    Dim printer As TextWriter
    Dim PrintBuffer As String
    Dim s_BarCode As String
    Dim dg_barcode As String
    
    Dim StrOut As OutputStream
    
    DateTime.TimeFormat = "HH:mm"
    AuxStr = DateTime.Time(DateTime.Now)
    'Main.DBMain.ExecNonQuery2("Insert into Ingreso values(?,?,?,?)",Array As Object(FolioIng,"",AuxStr,AuxDia))
    DateTime.TimeFormat = "HH:mm:ss"
    HoraStr = DateTime.Time(DateTime.Now)
    str6 = "   " & HoraStr
    str1 = " "
    str2 = "      "
    str3 = "          "
    str4 = "   "
    'str5 = "PLACA PATENTE : " & txtPatente.Text
    DateTime.TimeFormat = "HH:mm"
    HoraStr = DateTime.Time(DateTime.Now)
    str7 = "     HORA     "
    str8 = "      " & HoraStr
    HoraStr = HoraStr.Replace(":","")
    If HoraStr.Length = 4 Then
        s_BarCode = HoraStr & "000"
    Else
        s_BarCode = HoraStr & "0000"
    End If
    dg_barcode = bc.ComputeCheckDigit(bc.Symbologies.EAN8,s_BarCode)
    s_BarCode = s_BarCode & dg_barcode
    
    's_BarCode = "0000000008734"
    DateTime.TimeFormat = "HH:mm:ss"

    
    
    '********************* CAMBIO TIPO IMPRESION
    
    printer.Initialize(Main.serial1.OutputStream)
    
    PrintBuffer = ""
    PrintBuffer = PrintBuffer & Chr(27) & Chr(64)
    PrintBuffer = PrintBuffer & Chr(29) & Chr(33) & Chr(16) & Chr(1)
    PrintBuffer = PrintBuffer & Chr(27) & Chr(97) & Chr(1)
    'PrintBuffer = PrintBuffer & Chr(10)
    PrintBuffer = PrintBuffer & "Ticket Ingreso"
    printer.WriteLine(PrintBuffer)
    printer.Flush
    
    PrintBuffer = ""
    PrintBuffer = PrintBuffer & Chr(27) & Chr(64)
    PrintBuffer = PrintBuffer & Chr(29) & Chr(33) & Chr(0) & Chr(0)
    PrintBuffer = PrintBuffer & Chr(27) & Chr(97) & Chr(1)
    PrintBuffer = PrintBuffer & "Presentar a la Salida"
    PrintBuffer = PrintBuffer & Chr(27) & Chr(100) & Chr(1)
    printer.WriteLine(PrintBuffer)
    printer.Flush
    
    PrintBuffer = ""
    PrintBuffer = PrintBuffer & Chr(27) & Chr(64)
    PrintBuffer = PrintBuffer & Chr(29) & Chr(33) & Chr(16) & Chr(1)
    'PrintBuffer = PrintBuffer & Chr(10)
    PrintBuffer = PrintBuffer & "      HORA"
    printer.WriteLine(PrintBuffer)
    printer.Flush
    
    PrintBuffer = ""
    PrintBuffer = PrintBuffer & Chr(27) & Chr(64)
    PrintBuffer = PrintBuffer & Chr(29) & Chr(33) & Chr(16) & Chr(1)
    PrintBuffer = PrintBuffer & str6 & Chr(10)
    'PrintBuffer = PrintBuffer & Chr(27) & Chr(100) & Chr(2)
    printer.WriteLine(PrintBuffer)
    printer.Flush
    
    
    PrintBuffer=""
    PrintBuffer=PrintBuffer & Chr(27) & Chr(64)
    PrintBuffer=PrintBuffer &  Chr(27)&"a"&Chr(1) ' Justification (center)
    'PrintBuffer=PrintBuffer &  Chr(27)& Chr(29) & Chr(116) & Chr(3) 'CP437
    'PrintBuffer=PrintBuffer &  Chr(29) & "w" & Chr(4)
    PrintBuffer=PrintBuffer &  Chr(29)&"h"&Chr(80) ' Set bar code height  50
    PrintBuffer=PrintBuffer &  Chr(29)&"H"&Chr(0) ' Select printing position of HRI characters
    PrintBuffer=PrintBuffer &  Chr(29)&"f"&Chr(1) ' Select font For HRI characters
    PrintBuffer=PrintBuffer &  Chr(29)&"k"&Chr(3)& s_BarCode &Chr(0) ' Print bar code: s_BarCode <<<<<
    PrintBuffer=PrintBuffer &  Chr(27)&"!"&Chr(0)&""&Chr(10)
    PrintBuffer = PrintBuffer & Chr(27) & Chr(100) & Chr(1)
    printer.WriteLine(PrintBuffer)
    printer.Flush
    
    PrintBuffer = ""
    PrintBuffer = PrintBuffer & Chr(27) & Chr(64)
    PrintBuffer = PrintBuffer & Chr(27) & Chr(97) & Chr(1)
    PrintBuffer = PrintBuffer & "Todo vehiculo que no llegue al" & Chr(10)
    PrintBuffer = PrintBuffer & "horario de cierre, se podra" & Chr(10)
    PrintBuffer = PrintBuffer & "retirar al dia siguiente y" & Chr(10)
    PrintBuffer = PrintBuffer & "paga una multa de $10.000 pesos." & Chr(10)
    'PrintBuffer = PrintBuffer & "$3.000 PROMOCION HASTA 3 HORAS" & Chr(10)
    'PrintBuffer = PrintBuffer & "LUNES A VIERNES EXCEPTO FERIADOS" & Chr(10)
    'PrintBuffer = PrintBuffer & "$100 POR MINUTO" & Chr(10)
    'PrintBuffer = PrintBuffer & "$3.000 TARIFA MAXIMA DIA " & Chr(10)
    PrintBuffer = PrintBuffer & Chr(27) & Chr(100) & Chr(2)
    printer.WriteLine(PrintBuffer)
    printer.Flush
    
    
    
    
    
    'FolioIng = FolioIng + 1
        
End Sub
Sub btnSalir_Click
    Activity.Finish
End Sub
 
Top