Spanish [SOLUCIONADO] Imprimir código de barras en impresora etiquetas (CPCL)

vecino

Well-Known Member
Licensed User
Longtime User
según tu print setup dice esto CPCL, puedes publicar el setup de la impresora nuevamente, pero mas completo y visible
Esto es lo que imprime el setup, no sé por qué se pierde parte del lado izquierdo, el papel está lo más ajustado posible a ese lado.

pru.jpg
 

vecino

Well-Known Member
Licensed User
Longtime User
probaste este demo?
Sí, también, y muestra texto pero no códigos de barras.
 

vecino

Well-Known Member
Licensed User
Longtime User
Hasta ahora los códigos de barras solamente losHe imprime el software demo que viene junto a la documentación de la impresora.
He encontrado la del modelo exacto:
Documentación.
 

vecino

Well-Known Member
Licensed User
Longtime User
He estado todo el día probando con todos vuestros ejemplos y no he conseguido imprimir.
La demo (.apk) que trae la documentación sí que funciona.
Ya no sé qué más probar.

pru.jpg
 

TILogistic

Expert
Licensed User
Longtime User
estimado he revisado el código de la demo con visual android, tiene 2 opciones:

1.- Usar el SDK CPCL_SDK_V1.11.jar en B4A puede revisar el manual CPCL SDK Manual V1.02
2.- Convertir a código B4A lo que necesita BARCODE, TEXT, etc.

Nota:
Solo convertir los código de impresión (BARCODE, TEXT, etc.), la conexión la tiene en los demos posteados anteriormente.

Saludos.
 

TILogistic

Expert
Licensed User
Longtime User
y 3) cambiar la impresora
depende de la cantidad de impresoras y costo que quieran asumir sus cliente.

Pero:

pero ahora me piden que también imprima códigos de barras y... esa es mi duda.

Las impresoras que van a usar son de esas chinas,

no creo que sea la solución "cambiar la impresora", además convertir CPCL a B4A no costaría mucho tiempo en hacer una clase.

Depende del tiempo con que cuente para solucionar el requerimiento de sus clientes.

Saludos,
 

TILogistic

Expert
Licensed User
Longtime User
yo desarrolle una clase, me tomo una semana en desarrollar, pero la ventaja es que esta clase la puedo utilizar en todos los proyectos que utilizan impresoras Zebra o ZPL.

Saludos.
 

TILogistic

Expert
Licensed User
Longtime User
Actualmente tengo tres clases que como dije antes he desarrollado.

1.-Clase para conectividad Wifi, Bluetooth, USB, Red, etc.
2.-Clase para impresoras que emulan comandos ZPL
3- Clase para impresoras que emulan comandos ESC/POS

Las cuales utilizo según los requerimientos de los proyectos.

y ahora tengo en mente en desarrollar una clase, para impresoras que emulan comandos CPCL.

Saludos.
 

vecino

Well-Known Member
Licensed User
Longtime User
Hola, amigo, gracias por tu ayuda, comentarios y consejos.

estimado he revisado el código de la demo con visual android, tiene 2 opciones:
1.- Usar el SDK CPCL_SDK_V1.11.jar en B4A puede revisar el manual CPCL SDK Manual V1.02
2.- Convertir a código B4A lo que necesita BARCODE, TEXT, etc.
Nota:
Solo convertir los código de impresión (BARCODE, TEXT, etc.), la conexión la tiene en los demos posteados anteriormente.
Saludos.
De esos 2 puntos que propones, el primero, no tengo ni la más mínima idea de cómo usar ese SDK .jar
La segunda opción, te refieres a convertir a código B4A, ¿es eso lo que se está intentando con los ejemplos de este hilo, no?
De momento no ha funcionado y desconozco el motivo.

depende de la cantidad de impresoras y costo que quieran asumir sus cliente.
Pero:
no creo que sea la solución "cambiar la impresora", además convertir CPCL a B4A no costaría mucho tiempo en hacer una clase.
Depende del tiempo con que cuente para solucionar el requerimiento de sus clientes.
Saludos,
El cliente es una persona china que tiene varias tiendas de productos chinos, él ha escogido la impresora de su propio almacén y ha decidido usar esa.
No me he planteado decirle que cambie de impresora, tal vez sea una solución, pero me temo que no la podría elegir yo.

Actualmente tengo tres clases que como dije antes he desarrollado.
1.-Clase para conectividad Wifi, Bluetooth, USB, Red, etc.
2.-Clase para impresoras que emulan comandos ZPL
3- Clase para impresoras que emulan comandos ESC/POS
Las cuales utilizo según los requerimientos de los proyectos.
y ahora tengo en mente en desarrollar una clase, para impresoras que emulan comandos CPCL.
Saludos.
Mis conocimientos sobre B4A son de varios años de uso, pero no llegan como para hacer una clase de ese tipo.
Si decides hacer una clase para CPCL, supongo que puedes venderla, si el precio es adecuado me interesaría.

Lo que más me confunde es que no funcione nada de los ejemplos que se han ido proponiendo aquí, y sin embargo la demo del fabricante funciona perfectamente, ¿será que falta algo? ni idea.
A lo mejor no se debe usar un string, o a lo mejor no es un CRLF al final sino un LF, o a lo mejor... a saber el motivo.

Gracias por tu tiempo, seguiré haciendo algunas pruebas y a ver si con un poco de suerte consigo que imprima un simple código de barras.
Que, por cierto, es un EAN13 lo que necesito, la documentación dice que la impresora puede imprimirlos, pero en el demo se imprimen varios tipos menos el EAN13, curioso.
Saludos.
 

TILogistic

Expert
Licensed User
Longtime User
A lo mejor no se debe usar un string, o a lo mejor no es un CRLF al final sino un LF, o a lo mejor... a saber el motivo.

CRLF es newline char(10) y necesitas chr(13) + chr(10)

1623938188518.png

prueba;
en la clase de @agraham
B4X:
Private Sub PrintCodeBarCPCL
    Printer1.WriteString("! 0 200 200 210 1" & Chr(13) & Chr(10))
    Printer1.WriteString("BARCODE 128 1 1 50 150 10 HORIZ." & Chr(13) & Chr(10))
    Printer1.WriteString("TEXT 7 0 210 60 HORIZ." & Chr(13) & Chr(10))
    Printer1.WriteString("FORM" & Chr(13) & Chr(10))
    Printer1.WriteString("PRINT" & Chr(13) & Chr(10))
End Sub

encoding que usa la clase:

por cierto, es un EAN13 lo que necesito, la documentación dice que la impresora puede imprimirlos, pero en el demo se imprimen varios tipos menos el EAN13, curioso.
Saludos.

EAN 12 a 13 bits ver fig. 13 digitos.

 

Attachments

  • Screenshot_20210617-092710.png
    Screenshot_20210617-092710.png
    52.6 KB · Views: 154
  • Screenshot_20210617-092702.png
    Screenshot_20210617-092702.png
    71.6 KB · Views: 147
Last edited:

TILogistic

Expert
Licensed User
Longtime User
A lo mejor no se debe usar un string,

Se debe enviar bytes a la impresora no textos.

clase de @agraham

B4X:
' Send the string to the printer in IBM437 encoding which is the original PC DOS codepage
' This is usually the default codepage for a printer and is CodePage = 0
' Beware of using WriteString with Chr() to send numeric values as they may be affected by Unicode to codepage translations
' Most character level operations are pre-defined as UPPERCASE string variables for easy concatenation with other string data
Public Sub WriteString(data As String)
    WriteString2(data, "IBM437")
End Sub

' Send the string to the printer in the specified encoding
' You also need to set the printer to a  matching encoding using the CodePage property
' Beware of using WriteString2 with Chr() to send numeric values as they may be affected by codepage substitutions
' Most character level operations are pre-defined as UPPERCASE string variables for easy concatenatipon with other string data
Public Sub WriteString2(data As String, encoding As String)
    Try
        If Connected Then
            Astream.Write(data.GetBytes(encoding))
        End If
    Catch
        Log("Printer error : " & LastException.Message)
        AStream_Error
    End Try
End Sub

1623939126698.png
 

vecino

Well-Known Member
Licensed User
Longtime User
CRLF es newline char(10) y necesitas chr(13) + chr(10)

View attachment 115099
Años usando CRLF pensando que era CR & LF (Retorno de Carro y Avance de Línea), no debería tener ese nombre tan confuso, debería ser simplemente LF.
En otros lenguajes CRLF es eso, CR+LF, en fin, es algo que se debería cambiar en B4A.

prueba;
en la clase de @agraham
B4X:
Private Sub PrintCodeBarCPCL
    Printer1.WriteString("! 0 200 200 210 1" & Chr(13) & Chr(10))
    Printer1.WriteString("BARCODE 128 1 1 50 150 10 HORIZ." & Chr(13) & Chr(10))
    Printer1.WriteString("TEXT 7 0 210 60 HORIZ." & Chr(13) & Chr(10))
    Printer1.WriteString("FORM" & Chr(13) & Chr(10))
    Printer1.WriteString("PRINT" & Chr(13) & Chr(10))
End Sub

OOO.jpg


¡¡¡ Ha impreso el código de barras !!! :)
Eso sí, cada vez que le doy a imprimir avanza unos 35 cm el papel :/
Pero al menos ya es un principio.
Lo que no consigo es que imprima un EAN13

Es un gran avance, ¡¡¡ muchas gracias !!!
 

vecino

Well-Known Member
Licensed User
Longtime User
Bien, ahora funciona todo lo que pruebo y el problema era ese del CRLF o_O o_O o_O
Lo del avance del papel según leo en la documentación es motivado por el tipo de papel, si se usa papel de etiquetas se detiene en la siguiente marca, he probado con un poco que tengo por aquí de apenas 10 etiquetas reutilizadas y en efecto, se detiene cada vez que llega a una franja roja.

Se me olvidaba comentar que estoy probando con el código demo que adjunté, pero cambiando CRLF por chr(13)&chr(10), aunque realmente me he creado esto para escribir menos :)
B4X:
Dim const mCRLF As String = Chr(13)&Chr(10)

B4X:
    Dim cLin As String
    '
    If Not(twOut.IsInitialized) Then
        OutStream = BTconexSerial.OutputStream
        twOut.Initialize2(OutStream,"windows-1252")    '''twOut.Initialize2(BTconexSerial.OutputStream,"windows-1252")
    End If
    '
    ' --- TEST 1 ---
    cLin = "! 0 200 200 210 1" & mCRLF
    cLin = cLin & "TEXT 4 0 30 40 Prueba0123456789" & mCRLF
    cLin = cLin & "FORM" & mCRLF
    cLin = cLin & "PRINT" & mCRLF

    twOut.Write( cLin )
    twOut.Flush

    ' ---TEST 2 ---
    cLin = $"! 0 200 200 210 1 ${mCRLF}
             TEXT 4 0 30 40 Prueba0123456789 ${mCRLF}
             FORM ${mCRLF}
             PRINT ${mCRLF}"$

    twOut.Write( cLin )
    twOut.Flush
  
    ' ---TEST 3 ---
    cLin = "! 0 200 200 210 1" &mCRLF
    cLin = cLin & "JOURNAL" &mCRLF
    cLin = cLin & "CENTER" &mCRLF 
    cLin = cLin & "BARCODE-TEXT 7 0 5" &mCRLF
    cLin = cLin & "B EAN13 1 1 50 150 10 1234567890123" &mCRLF
    cLin = cLin & "BARCODE-TEXT OFF" &mCRLF
    cLin = cLin & "FORM" &mCRLF
    cLin = cLin & "PRINT" &mCRLF
 
  
    twOut.Write( cLin )
    twOut.Flush

Sólo me queda dar las gracias a todos por vuestra ayuda y especialmente a oparra por la paciencia que ha tenido.
Muchísimas gracias.
 

Attachments

  • photo1623953480.jpeg
    photo1623953480.jpeg
    78.6 KB · Views: 166
Last edited:

TILogistic

Expert
Licensed User
Longtime User
BIEEEEEEN !!! Te felicito.

A veces es difícil de explicar que hacer al no tener el dispositivo que usa el usuario esta usando, pero lo lograste.

Solo debes ahora revisar el manual HPRT HPRT HM-A300_HM-T300 Programming Manual_Rev.1.1 y crearte tu propia clase cuando tengas tiempo, ya que CPCL es otro emulador de comandos de impresión común en impresoras nuevas en el mercado.

En cuanto al código de barra EAN en el demo, solo debes seleccionar EAN e indicar el texto con 13 dígitos a imprimir.


Saludos.
 
Last edited:
Top