Spanish [SOLUCIONADO]Impresora ticket

Jorgelcr

Active Member
Licensed User
Hola,

Tengo que imprimir unos ticket desde una app por una impresora, la impresora va a estar al lado de la tablet donde esta la app y estoy pensando en imprimir por usb en lugar de wifi.
¿Que me recomendais?¿Alguna marca modelo en concreto?

Gracias
 

edgar_ortiz

Active Member
Licensed User
Hola,

Tengo un par de aplicaciones que imprimen via Bluetooth y con respecto a la marca, depende de cuanto quieras gastar, en mi caso como son portátiles, las Intermec salieron muy bien.

Saludos
 

Jorgelcr

Active Member
Licensed User
hola Edgar,

La pregunta de imprimir por usb en lugar de wifi o bluetooth es porque tablet e impresora van a estar al lado la una de la otra.
Que librería utilizas para la impresion bluetooth?
 

oparra

Well-Known Member
Licensed User
hola Edgar,

La pregunta de imprimir por usb en lugar de wifi o bluetooth es porque tablet e impresora van a estar al lado la una de la otra.
Que librería utilizas para la impresion bluetooth?
Puedes usar ambas si quieres USB, Wifi, BLE.

Si deseas portabilidad y movilidad de tus recursos de impresión es mejor Wifi o BLE.

Libreria: Serial, netwotk.. etc.

Buscar en el foro.

Saludos,
 
Last edited:

oparra

Well-Known Member
Licensed User
USB.

 

Jorgelcr

Active Member
Licensed User
hola,
consigo conectar por usb utilizando la libreria (usbserial), pero no logro mandar impresion. me da error en la linea usbserial.BaudRate = 115200 (No sé que valor debo poner)

También he intentado con la libreria usb print pero me da error en la linea:

pt.connectusb2(vid,pid) 'HERE IS YOU DEVICE VendorID AND productID"


los datos que saco de mi modelo de impresora son los de abajo.
vid=0x0FE6
pid=0x811E
 

Dadaista

Active Member
Licensed User
Yo utilizo USBSerial

Das permiso al usb?
B4X:
Dim usb1 As UsbSerial

usb1.RequestPermission(1)

Has inicializado la impresora antes de imprimir?
B4X:
Const eClear As String = Chr(27) & Chr(64)'"@"
 

Dadaista

Active Member
Licensed User
Claro! Dame una hora y te lo pego aqui

B4X:
Dim usb1 As UsbSerial
Dim astreams1 As AsyncStreams
Dim listaParamPRNUSB As List
Const eClear As String = Chr(27) & Chr(64)'"@"
Const eCentre As String = Chr(27) & Chr(97) & Chr(1)'"1"
Const eLeft As String = Chr(27) & Chr(97) & Chr(0)'"0"
Const eRight As String = Chr(27) & Chr(97) & Chr(2)'"2"

Const eDrawer As String = eClear & Chr(27) & "p" & Chr(0) & ".}"
Const eCut As String = Chr(27) & "i" & CRLF 'CORTE PARCIAL

Sub ImprimirUSB
    If usb1.UsbPresent(1) = usb1.USB_NONE Or usb1.UsbPresent(1) <> usb1.USB_DEVICE Then
        MsgboxAsync("Impresora No Conectada!", "ERROR")
        Return
    End If

    If Not(listaParamPRNUSB.IsInitialized) Then
        Dim rFicheroParametros As TextReader
        rFicheroParametros.Initialize(File.OpenInput(rp.GetSafeDirDefaultExternal("") & "/Config", "prnusb.cfg"))
        listaParamPRNUSB.Initialize
        listaParamPRNUSB = rFicheroParametros.ReadList
        rFicheroParametros.Close
    End If

    If usb1.HasPermission(1) Then
        If listaParamPRNUSB.Get(0) = "0" Or listaParamPRNUSB.Get(0) = "2" Then
            usb1.SetCustomDevice(listaParamPRNUSB.Get(0), listaParamPRNUSB.Get(1), listaParamPRNUSB.Get(2))
        End If
  
        Dim dev As Int
        dev = usb1.Open(listaParamPRNUSB.Get(3), 1)
        If dev <> usb1.USB_DEVICE Then
            MsgboxAsync("Error Abriendo Puerto USB 1", "ERROR")
            Return
        End If
        astreams1.Initialize(usb1.GetInputStream, usb1.GetOutputStream, "astreams1")
        usb1.SetParameters(listaParamPRNUSB.Get(3), listaParamPRNUSB.Get(4), _
                     listaParamPRNUSB.Get(5), listaParamPRNUSB.Get(6))
        ProgressDialogShow("Imprimiendo...")
        '════════════════════════════════════
         PrintTicket
        '════════════════════════════════════
        astreams1.Close
        usb1.Close
    Else
        usb1.RequestPermission(1)
    End If
End Sub
PRNUSB.CFG
Parametros configuracion impresora USB
Driver (2)
VendorId (En Decimal) (1046)
ProductId (En Decimal) (20497)
BaudRate (115200)
DataBits (8)
StopBits (1)
Parity (0)

Los parametros entre corchetes son los que tengo yo en mi fichero
o sea.. el fichero queda asi:
2
1046
20497
115200
8
1
0


B4X:
Sub PrintTicket
    Dim SendMsg  As String
    Dim i As Int = 0
    Dim fechahora As String
  
    SendMsg = eClear
    SendMsg = SendMsg & eCentre


    'Hay Logo Cargado en la Impresora
    SendMsg = SendMsg & Chr(28) & Chr(112) & Chr(1) & Chr(51)
    SendMsg = SendMsg & Chr(13) & Chr(10)'Salto de Linea

    SendMsg = SendMsg & Chr(27) & "!" & Chr(0)
    SendMsg = SendMsg & Chr(13) & Chr(10)
    SendMsg = SendMsg & eLeft

    'Imprimir Fecha y Hora
    fechahora = DateTime.Date(DateTime.Now)

    SendMsg = SendMsg & fechahora
    SendMsg = SendMsg & Chr(13) & Chr(10)

    For i = 0 To 47
        SendMsg = SendMsg & Chr(205) '════....
    Next
    SendMsg = SendMsg & Chr(13) & Chr(10)

    For i = 0 To 47
        SendMsg = SendMsg & Chr(196) '────....
    Next
    SendMsg = SendMsg & Chr(13) & Chr(10)

    'Bucle
    For i = 0 To 10
        SendMsg = SendMsg & i
        SendMsg = SendMsg & Chr(13) & Chr(10)
    Next

    For i = 0 To 47
        SendMsg = SendMsg & Chr(196) '────....
    Next
    SendMsg = SendMsg & Chr(13) & Chr(10)

    For i = 0 To 47
        SendMsg = SendMsg & Chr(205) '════....
    Next

    For i = 0 To 6
        SendMsg = SendMsg & Chr(13) & Chr(10)
    Next
    SendMsg = SendMsg & eCut
    SendMsg = SendMsg & Chr(27) & Chr(112) & Chr(0) & Chr(60) & Chr(240)'abre el cajon
    astreams1.Write(SendMsg.GetBytes("ISO-8859-9")) 'o UTF-8!!!!
End Sub
Espero que te sirva de ayuda
 
Last edited:

Jorgelcr

Active Member
Licensed User
@Dadaista Lo primero de todo Gracias!!
Tengo algunas dudas:

He copiado el código a mi proyecto y me da error las lineas de Const (Lo he solucionado poniendo delante DIM), no sé si estará bien.

Me da error la siguiente linea:
If usb1.UsbPresent(1) = usb1.USB_NONE Or usb1.UsbPresent(1) <> usb1.USB_DEVICE Then

Los datos del archivo PRNUSB.CFG de configuracion de la impresora de dónde sacas la información, es genérica?

Si pudieras subir el proyecto te lo agradecería. Me está costando entenderlo
 

Dadaista

Active Member
Licensed User
Hola

No es posible que suba el proyecto, lo siento. De hecho he simplificado el procedimiento printicket porque el original lee tamaños de las letras de ficheros, Literales de campos y si te lo hubiese puesto entero, me hubieses mandado lejos 🤣🤣

Vamos a ver.. El archivo .CFG lo creas tu con los parametros. Yo lo he llamado asi pero lo puedes llamar "tomate.gas" si quieres.

Normalmente la impresora viene configurada "de fábrica" a 115200 la velocidad con 8 bits de datos con 1 bit de paridad y con un bit de stop. Lo que es importante es el VendorID y el ProductID que recuerda los tienes que poner en decimal porque sino, no funcionará. La primera linea del fichero es el driver y solo hay 3. Hablo de memoria porque pase el aplicativo a B4J y ahora en B4J difiere en algunas cosas pero el procedimiento es funcional.

No dices que error te da la linea
B4X:
If usb1.UsbPresent(1) = usb1.USB_NONE Or usb1.UsbPresent(1) <> usb1.USB_DEVICE Then
No obstante, si tienes la impresora conectada, puedes obviar la linea y quitarla.

He copiado el código a mi proyecto y me da error las lineas de Const (Lo he solucionado poniendo delante DIM), no sé si estará bien.
Si claro... está bien, no te preocupes

Deberias tener algunas instrucciones de la impresora a ver como está configurada. Yo funciono con una impresora china y va bien

Quizas puedes subir tu proyecto a ver si entre todos te podemos echar una mano y que lo saques adelante.

En el menu archivo, exportar como ZIP y lo subes

Quizas alguna persona mas que este leyendo el hilo puede aportar algo que a mi se me escape :)
 

Jorgelcr

Active Member
Licensed User
os detallo un poco.
Impresora Marca POS IBERICA, MODEL P80WIFI USB
Con el código me detecta la impresora pero no abre el puerto de conexion.

B4X:
Sub ImprimirUSB
    If usb.UsbPresent = usb.USB_NONE Then
        Log("Msgbox - no device")
        Msgbox("No USB device or accessory detected!", "Error")
        Log("Msgbox - returned")
        Return
    End If
    Log("Checking permission")
    If (usb.HasPermission) Then
        Msgbox(usb.DeviceInfo, "Device Information")
        Dim dev As Int
    
        Dim rFicheroParametros As TextReader
        rFicheroParametros.Initialize(File.OpenInput(File.DirAssets, "prnusb.cfg"))
        listaParamPRNUSB.Initialize
        listaParamPRNUSB = rFicheroParametros.ReadList
        rFicheroParametros.Close
        
        dev = usb.Open(9100) ' He probado varios valores

        If dev <> usb.USB_DEVICE Then
            MsgboxAsync("Error Abriendo Puerto USB 1", "ERROR")
            Return
        End If
        
        
        
        If dev <> usb.USB_NONE Then
            Log("Connected successfully!")
            'btnOpen.Enabled = False
            'btnClose.Enabled = True
            'btnSend.Enabled = True
            astreams.Initialize(usb.GetInputStream, usb.GetOutputStream, "astreams")
        Else
            Log("Error opening USB port")
        End If
    Else
        usb.RequestPermission
    End If
    
End Sub
 

Attachments

oparra

Well-Known Member
Licensed User
IBERICA, MODEL P80WIFI USB (Barcelona)

La especificaciones del modelo tiene un sdk y emula ESC/POS, debes revisar los parámetros de conexión vía USB.

Saludos,
 

Jorgelcr

Active Member
Licensed User
perdona mi ignorancia. pero como hago eso?
He encontrado el cd y veo que tiene una carpeta sdk e incluso tiene 2 apk que he instalado y funcionan. Pero como hago para poder sacar la información y poder ver/importar funciones o librerias a mi proyecto b4a?
Como ves estoy muy perdido con esto.
 

oparra

Well-Known Member
Licensed User
perdona mi ignorancia. pero como hago eso?
He encontrado el cd y veo que tiene una carpeta sdk e incluso tiene 2 apk que he instalado y funcionan. Pero como hago para poder sacar la información y poder ver/importar funciones o librerias a mi proyecto b4a?
Como ves estoy muy perdido con esto.
Puedes mirar el SDK (Creo que viene para distintos SO) y ver que hacen la funciones para android.

Otra es mirar los APK con https://github.com/skylot/jadx

Por ultimo Publica aquí los APK, para verlos

Saludos,
 
Top