Spanish Problema con impresion Bluetooth

Discussion in 'Spanish Forum' started by Edu Portu, Jan 18, 2015.

  1. Edu Portu

    Edu Portu Member Licensed User

    Hola a todos,

    Estoy desarrollando una aplicacion en la que se imprime por Bluetooth en una STAR DP8340S. La aplicacion esta casi acabada y aparentemente imprime sin problemas, pedidos, facturas, cobros, listados...

    Pero haciendo ya pruebas un poco mas complejas me he dado cuenta de que cuando intento imprimir mas de 30 lineas (aproximadamente), el buffer de la impresora se vuelve loco y se pierden caracteres y lineas.

    He hecho un ejemplo para delimitar el problema y con este codigo:

    Code:
    Sub Process_Globals
        
    'These global variables will be declared once when the application starts.
        'These variables can be accessed from all modules.
        'Variables para imprimir
        Dim btAdmin As BluetoothAdmin
        
    Dim StarDP8340s As Serial
        
    Dim printer As TextWriter
    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.
       
    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("Layout1")
       
        
    Dim Btn As Button
       
        Btn.Initialize(
    "Boton")
        Btn.Text = 
    "Imprimir prueba"
        
    Activity.AddView(Btn, 00100100)
    End Sub

    Sub Boton_Click
        
    'Imprimimos la prueba
        btAdmin.Initialize("BlueTeeth")
        StarDP8340s.Initialize(
    "StarPrinter")
        StartPrinter
    End Sub

    Sub Activity_Resume

    End Sub

    Sub Activity_Pause (UserClosed As Boolean)

    End Sub


    Sub StarPrinter_Connected (Success As Boolean)
        
    Dim i As Int
       
        
    If Success Then
            printer.Initialize(StarDP8340s.OutputStream)
            
    'Prueba
               For i = 0 To 50
                printer.WriteLine(RellenaI(i,
    60,"0"))
                printer.Flush
            
    Next
            
    ToastMessageShow("Impresion finalizada.....",True)
               
            printer.Close
            StarDP8340s.Disconnect
        
    Else
            
    If Msgbox2("""Error de impresora","Reimprimir","Cancelar","",Null) = DialogResponse.POSITIVE Then
                StartPrinter
            
    End If
        
    End If
    End Sub


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

        PairedDevices.Initialize

        
    Try
            PairedDevices = StarDP8340s.GetPairedDevices
        
    Catch
            
    Msgbox("Conectando dispositivos","Error de impresora")
            StarDP8340s.Disconnect
        
    End Try

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

        
    If PairedDevices.Size = 1 Then
            
    Try
            StarDP8340s.ConnectInsecure(btAdmin,PairedDevices.Get(PairedDevices.GetKeyAt(
    0)),1)
            
    Catch
                
    Msgbox("Conectando","Error de impresora")
                StarDP8340s.Disconnect
            
    End Try
        
    Else
            L.Initialize

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

            Res = 
    InputList(L, "Elige dispositivo", -1)

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

    Sub Replicate(Caracter As String, Ancho As Int)
        
    Dim Cadena As String = ""
        
    Dim i As Int
        
    For i = 0 To Ancho-1
            Cadena = Cadena & Caracter
        
    Next
        
    Return Cadena
    End Sub

    Sub Len(Text As StringAs Int
        
    Return Text.Length
    End Sub

    Sub RellenaI(Cadena As String, Ancho As String, Car As StringAs String
        
    Return Replicate(Car, Ancho - Len(Cadena)) & Cadena
    End Sub
    Empieza a imprimir y cuando va por la linea 30 imprime solo media linea, luego pasa a la 32, luego media linea 42... asi hasta llegar a la linea 50, como si se perdiesen datos del buffer de impresion.

    Cada linea hago un printer.flush para que se imprima inmediatamente.

    Saludos y gracias
    Edu
     
  2. Edu Portu

    Edu Portu Member Licensed User

    He probado haciendo pruebas a sustituir los WriteLine

    Code:
    If Success Then
            printer.Initialize(StarDP8340s.OutputStream)
            
    'Prueba
               For i = 0 To 50
                printer.WriteLine(RellenaI(i,
    60,"0"))
                printer.Flush
            
    Next
    por un solo WriteList

    Code:
    Dim impreso As List
       
        
    If Success Then
            printer.Initialize(StarDP8340s.OutputStream)
            
    'Prueba
            impreso.Initialize
               
    For i = 0 To 50
                impreso.add(RellenaI(i,
    60,"0"))
            
    Next
            printer.WriteList(impreso)
            printer.flush
    y el resultado es el mismo, se cortan y pierden las lineas a partir de la 30... por si puede servir de ayuda...

    Saludos y gracias
    Edu
     
  3. Edu Portu

    Edu Portu Member Licensed User

    Sigo investigando, parece ser que el problema es que a la conexion Bluetooth o a la impresora se le atraganta tanto dato seguido (supongo que un problema de buffer).

    He probado a hacer una pausa a mitad de impresion...

    Code:
    If Success Then
            printer.Initialize(StarDP8340s.OutputStream)
            
    'Prueba
             For i = 0 To 50
                printer.WriteLine(RellenaI(i,
    60,"0"))
                printer.Flush
                
    if i = 25 then MsgBox("PAUSA""PAUSA")
            
    Next
    ...e imprime las 50 lineas perfectamente.

    Alguna solucion para que no se atasque el buffer? O meterle un temporizador para que despues de cada X lineas espere X segundos?

    Saludos y gracias
    Edu
     
  4. dar2o3

    dar2o3 Active Member Licensed User

  5. Descartex

    Descartex Well-Known Member Licensed User

    Muy buenas, Edu.
    Yo intentaría ponerle una especie de retardo cada x lineas, si te funciona y no te ralentiza las operaciones, perfecto.
    Prueba con varios rangos de tiempo, de menos a mas.
    Un saludo.
     
  6. JOSE HIGINIO DIZ DIOS

    JOSE HIGINIO DIZ DIOS New Member Licensed User

    Hola Edu,
    Ya sé que tu POS es muy antiguo y supongo que finalmente habrás solucionado tu problema que igualmente ocurría si se utilizaban las impresoras desde un PDA. El caso es que estoy pasando mi aplicación a b4a y tengo problemas al imprimir con las DP8340S con un conector de bluetooth BT-100. De momento utilicé el programa que pones de ejemplo en este POS y otros programas que encontré en el foro, pero al lanzar el programa a veces imprime, a veces no, otras da error de broken pipe, otras simplemente hace ruido la impresora pero no imprime... no consigo imprimir dos ejemplos seguidos correctamente.
    No sé si en algún momento te surgió este problema y lo solucionaste... ¿podría ser un problema de librerias, manifest, versión de android? ¿podrías subirme un ejemplo que sepas con certeza que imprime cada vez que pulsas un botón de imprimir?
    A ver si puedes ayudarme con el tema.
    Gracias
     
  7. aviario

    aviario Active Member Licensed User

    Hola, adjunto un modulo de impresión que uso para un programa de autoventa
     

    Attached Files:

    JOSE HIGINIO DIZ DIOS and dar2o3 like this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice