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:
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
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:
B4X:
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, 0, 0, 100, 100)
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 String) As Int
Return Text.Length
End Sub
Sub RellenaI(Cadena As String, Ancho As String, Car As String) As 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