Spanish Imprimir por BT

wildfandango

Member
Licensed User
Longtime User
Hola a todos

Estoy intentando imprimir por BT con una impresora termal POS

Os linko un POST de como lo hago y un un problemilla que tengo.

Mi pregunta es la siguiente

Como hago para imprimir todo el juego de caracteres?

he probado con decenas y al final uso CP858, pero tampoco me va bien, le faltan un montón de letras como ó y el €

Alguno habéis tenido el mismo problema...?

Gracias de antemano.
 

rscheel

Well-Known Member
Licensed User
Longtime User
Tienes que colocar si o si esta cadena al inicio de la impresión

B4X:
PrintBuffer=Chr(27)&"t"&Chr(16)&"Hello öäüßéèê" 'Set codepage 1252
 

rscheel

Well-Known Member
Licensed User
Longtime User
Tu código quedaría así

B4X:
Sub btPRINTER_Connected (Success As Boolean)
    Dim prnBUF As TextWriter
    Dim lstBUF As List
    Dim i As Int

    ' I dont know the apropiate CP for spanish chars like ó, ñ or €
    lstBUF = File.ReadList(dir, fic)

    If Success Then
        ProgressDialogShow2("Imprimiendo...", False)
        prnBUF.Initialize2(btCONN.OutputStream,"windows-1252")
        prnBUF.WriteLine(Chr(27)&"t"&Chr(16))
        For i = 0 To lstBUF.Size - 1
            prnBUF.WriteLine(lstBUF.Get(i))
        Next
        prnBUF.Flush
        prnBUF.Close
        ProgressDialogHide
        ToastMessageShow("("&lstBUF.Size&") Done...",False)
        btCONN.Disconnect
    Else
        Msgbox("ERROR...","ERROR BT")
    End If
End Sub
 
Last edited:

wildfandango

Member
Licensed User
Longtime User
Muchas gracias!

Voy a probarlo con algunos de los Cambios propuestos por Erel (usar asyncstreams en lugar de textwriter)

Pero entiendo que por lo que me comentas el código quedaría así...

B4X:
Dim Astream As AsyncStreams
....
....

Sub btPRINTER_Connected (Success As Boolean)
    Dim txtENC As String
    Dim txtBUF As String

    dr = base.itemx(prnFIC,";",1)
    fc = base.itemx(prnFIC,";",2)

    txtENC = "windows-1252" ' Para que aparezca el simbolo del €
    txtBUF = Chr(27)&"t"&Chr(16)&CRLF&File.ReadString(dir, fic)

    If Success Then
        If Not(Astream.IsInitialized) Then Astream.Initialize(btCONN.InputStream,btCONN.OutputStream,"printerAS")
        Astream.Write(txtBUF.GetBytes(txtENC))
    Else
        Msgbox("ERROR...","ERROR BT")
    End If

    ' Al ser asíncrono si desconecto da error...
    ' btCONN.Disconnect
End Sub

En cuanto lo pruebe os confirmo si funciona.
 

wildfandango

Member
Licensed User
Longtime User
Qué se supone que hace exactamente Chr(27)&"t"&Chr(16) ?

Lo he probado tal cual me dices con CP windows-1252 y nada el símbolo del euro sigue sin imprimirse
 

rscheel

Well-Known Member
Licensed User
Longtime User
Qué se supone que hace exactamente Chr(27)&"t"&Chr(16) ?

Lo he probado tal cual me dices con CP windows-1252 y nada el símbolo del euro sigue sin imprimirse

Esa linea coloca los caracteres especiales, por ejemplo los acentos las ñ y otro.
 

rscheel

Well-Known Member
Licensed User
Longtime User
Signo €
 

Attachments

  • Captura2.PNG
    Captura2.PNG
    221.4 KB · Views: 371

wildfandango

Member
Licensed User
Longtime User
Pues yo no lo consigo... :(

te explico lo que hago a ver si puedes echarme una mano.

Cargo en un fichero .TXT todo lo que quiero imprimir en este caso es esto (adjunto el TXT):

El camión!
Que pasaba por Valença
era de Citroën
Fabricado en España
-----------------------
áéíóú
ÁÉÍÓÚ
- - - - - - - - - - - -
!¡¿?<>
ºª#$%&
{·€·}
_______________________
*[;,.:]
_ _ _ _ _ _ _ _ _ _ _ _

E imprimo con el siguiente código (previa lectura del fichero de texto):

B4X:
Sub twPRINT_Connected(Success As Boolean)
    Dim txtENC As String
    Dim dr,fc As String
    Dim lstBUF As List
    Dim tmp As String
    Dim i As Int

    dr = lib.itemx(prnFIC,";",1)
    fc = lib.itemx(prnFIC,";",2)

    txtENC = "windows-1252" ' No saca el símbolo del euro
    lstBUF = File.ReadList(dr, fc) ' Cargo el fichero de texto en una lista línea a línea

    If Success Then
        ToastMessageShow("Imprimiendo ("&lstBUF.Size&") Líneas...",False)
       
        prnBUF.Initialize2(btCONN.OutputStream,txtENC) 'inicializo con CP windows-1252

        prnBUF.WriteLine("€") ' Esto me imprime Ç
        prnBUF.Flush

        tmp = Chr(27)&"t"&Chr(16)&CRLF ' Utilizo la cadena que me recomendaste
        prnBUF.WriteLine(tmp)
        prnBUF.Flush

        prnBUF.WriteLine("€") ' Esto me imprime Ç también
        prnBUF.Flush

        For i = 0 To lstBUF.Size - 1 'Añado todas las líneas
            tmp = lstBUF.Get(i)
            ' no hacer demasiado caso a esto, son pruebas
            tmp = tmp.Replace(Chr(13),"")
            tmp = tmp.Replace(Chr(12),"")
            tmp = tmp.Replace(Chr(10),"")
            tmp = tmp.Replace(CRLF,"")
           
            prnBUF.WriteLine(tmp)
            prnBUF.Flush
           
            Sleep(10)
        Next
        Sleep(5000)
        prnBUF.Flush
        prnBUF.Close
        ToastMessageShow("("&lstBUF.Size&") Líneas Impresas/Enviadas...",False)
    Else
        Msgbox("No encuentro la impresora...","ERROR de impresora/BT")
    End If
End Sub

y lo que obtengo es lo que se ve en la foto
 

Attachments

  • prueba.jpg
    prueba.jpg
    79.9 KB · Views: 378
  • ejemplo.txt
    217 bytes · Views: 367

rscheel

Well-Known Member
Licensed User
Longtime User
Pues yo no lo consigo... :(

te explico lo que hago a ver si puedes echarme una mano.

Cargo en un fichero .TXT todo lo que quiero imprimir en este caso es esto (adjunto el TXT):

El camión!
Que pasaba por Valença
era de Citroën
Fabricado en España
-----------------------
áéíóú
ÁÉÍÓÚ
- - - - - - - - - - - -
!¡¿?<>
ºª#$%&
{·€·}
_______________________
*[;,.:]
_ _ _ _ _ _ _ _ _ _ _ _

E imprimo con el siguiente código (previa lectura del fichero de texto):

B4X:
Sub twPRINT_Connected(Success As Boolean)
    Dim txtENC As String
    Dim dr,fc As String
    Dim lstBUF As List
    Dim tmp As String
    Dim i As Int

    dr = lib.itemx(prnFIC,";",1)
    fc = lib.itemx(prnFIC,";",2)

    txtENC = "windows-1252" ' No saca el símbolo del euro
    lstBUF = File.ReadList(dr, fc) ' Cargo el fichero de texto en una lista línea a línea

    If Success Then
        ToastMessageShow("Imprimiendo ("&lstBUF.Size&") Líneas...",False)
      
        prnBUF.Initialize2(btCONN.OutputStream,txtENC) 'inicializo con CP windows-1252

        prnBUF.WriteLine("€") ' Esto me imprime Ç
        prnBUF.Flush

        tmp = Chr(27)&"t"&Chr(16)&CRLF ' Utilizo la cadena que me recomendaste
        prnBUF.WriteLine(tmp)
        prnBUF.Flush

        prnBUF.WriteLine("€") ' Esto me imprime Ç también
        prnBUF.Flush

        For i = 0 To lstBUF.Size - 1 'Añado todas las líneas
            tmp = lstBUF.Get(i)
            ' no hacer demasiado caso a esto, son pruebas
            tmp = tmp.Replace(Chr(13),"")
            tmp = tmp.Replace(Chr(12),"")
            tmp = tmp.Replace(Chr(10),"")
            tmp = tmp.Replace(CRLF,"")
          
            prnBUF.WriteLine(tmp)
            prnBUF.Flush
          
            Sleep(10)
        Next
        Sleep(5000)
        prnBUF.Flush
        prnBUF.Close
        ToastMessageShow("("&lstBUF.Size&") Líneas Impresas/Enviadas...",False)
    Else
        Msgbox("No encuentro la impresora...","ERROR de impresora/BT")
    End If
End Sub

y lo que obtengo es lo que se ve en la foto

Puedes adjuntar tu proyecto o solo la parte de la impresión para reviarlo.
 

wildfandango

Member
Licensed User
Longtime User
Sin problema

Os adjunto el proyecto entero, estaba haciéndolo independiente con la idea de publicarlo aquí... cuando este terminado, aviso NO ESTA TERMINADO :oops: cuando lo termine lo publicaré entero, porque creo que hace falta un ejemplo de impresión en condiciones en B4A....

Qué problemas le veo?

PRIMERO en modo textwriter funciona! pero no se me muestran los caracteres especiales y lo del Sleep(x) me parece un poco cutre.

SEGUNDO en modo AsyncStreams no me funciona en absoluto, se me come los enters! tb tengo que meterle el Sleep(x) sino no funciona... un lio... todo mal :mad:

B4A Versión: 8.00
Adjunto las libs que pueden ser menos comunes y captura de las libs que usa
He tenido que comprimir todo bastante para no superar el limite del foro...
 

Attachments

  • LIBS.zip
    19.6 KB · Views: 367
  • Sin título.png
    Sin título.png
    3.8 KB · Views: 349
  • _MaterialDesignPrint.zip
    214.7 KB · Views: 413

rscheel

Well-Known Member
Licensed User
Longtime User
A mi me imprime el signo euro, prueba desconectando la batería de la impresora y volver a conectarla.
 

wildfandango

Member
Licensed User
Longtime User
Ya he hecho eso varias veces y nada, será el modelo de impresora una brother PJ-763, no es un aparato barato precisamente.

La he reiniciado ya muchas veces...

Gracias de todos modos, este tema me tiene bastante quemado y lo dejaré aparcado por un tiempo...

brother_pa_rc_001_pocketjet_7_rugged_roll_1281418.jpg
 

Reinaldo

Member
Licensed User
Longtime User
Te recomiendo que mire en el manual de la impresora que fuentes maneja y como se le indica la fuente que va a utilizar al momento de imprimir, por lo menos con las Zebra es asi, es decir, la fuente que se va a utilizar es la que debe tener el mapa de caracteres completo.
 
Top