Hola, esta es mi primera entrada de mi blog la idea de este blog es que el código que yo vaya haciendo en el trabajo en que estoy actualmente y represente algún desafío, compartirlo con todos ustedes. Ojalá a alguien le sirva.
Estuve trabajando en una aplicación de escritorio para un supermercado en un país de américa, el problema que surgió fue al momento de hacer la impresión de un tiket donde quedaba registrada la compra que se había realizado. La impresora es una impresora POS de referencia Epson TM-U950, la cual es algo curiosa ya que maneja dos recibos, uno que se llama Receipt (recibo que se le entrega al cliente) y otro que se llama Journal (copia del recibo original, que queda en el almacén). Además tenía que enviar alguna instrucción para en la impresión para abrir un cajón de dinero que estaba conectado a la impresora.
La impresora no se instaló en el computador, es decir, no se instaló ningún Driver en el sistema operativo, por esta razón la impresión tendría que manejarse directamente con el puerto paralelo. Para esto realicé una función sencilla en vb.net la cual imprime un texto, manda el corte de papel y por último envía la instrucción para abrir el cajón de dinero.
Función en Vb.net para imprimir en una impresora dual. Se imprime en los dos rollos ya que el texto que se envía a imprimir contiene 80 caracteres 40 para el primer rollo y 40 para el segundo. Para asegurarnos que se envíen los 40 caracteres, hay una función llamada Espacios que recibe un string de cualquier longitud y devuelve una cadena de 40 caracteres de longitud. Es el siguiente código.
1: Public Sub RecargaICEDoble()
2:
3: Dim objFSO
4: Dim objStream
5: objFSO = CreateObject("Scripting.FileSystemObject")
6: objStream = objFSO.CreateTextFile("LPT1") 'Puerto al cual se envía la impresión
7:
8: Try
9:
10: objStream.Writeline(Chr(27) & Chr(99) & Chr(48) & Chr(3)) 'Le pedimos que imprima tanto en el rollo Receipt como en el Journal
11: objStream.Writeline(Chr(27) & Chr(122) & Chr(0)) 'Ponemos en Off la impresion paralela
12: Dim Texto As String = "Esta es una prueba"
13: Dim Texto1 As String = "esta linea es diferente"
14: Texto = Espacios(Texto)
15: Texto1 = Espacios(Texto1)
16: objStream.Writeline(Texto & Texto)
17: objStream.Writeline(Texto & "*******")
18: objStream.Writeline("") 'Espacio en blanco
19: objStream.Writeline("")
20: objStream.Writeline(Chr(27) & Chr(109)) ' este es un corte de ticket, no completo
21: objStream.Writeline(Chr(27) & "p" & Chr(&H0) & Chr(&H64) & Chr(&H64)) ' este abre el cajon del dinero
22:
23: Catch ex As Exception
24:
25: Finally
26:
27: objStream.Writeline(Chr(27) & Chr(64)) ' limpia Buffer de la impresora
28: objStream.Writeline(Chr(27) & Chr(60)) ' la deja en Posicion Stand BY
29:
30: objStream.Close()
31:
32: objFSO = Nothing
33: objStream = Nothing
34:
35:
36: End Try
37: End Sub
La Función para calcular los 40 caracteres de cada recibo es la siguiente:
1: ublic Function Espacios(ByVal dato As String) As String
2: Dim rta As String = dato
3: Try
4: Dim h As Long
5: h = 1
6: If Len(dato) >= 40 Then
7: dato = Mid(dato, 1, 40)
8: Return rta
9: End If
10: Do
11: If Len(dato) < 40 Then
12: dato = dato & " "
13: End If
14: If Len(dato) = 40 Then
15: rta = dato
16: Return rta
17: End If
18: h = h + 1
19: Loop
20:
21: Catch ex As Exception
22: Return rta
23: End Try
24: End Function
El Resultado de impresión es el siguiente:
Espero que les sirva. Hasta la proxima!!
Claro que funciona muy bien
ResponderEliminarsaludos
Exelente, muy buen aporte
ResponderEliminarcres que funcione para un puerto usb?
ResponderEliminarNo puedo imprimir en una TMU 220 como l ehago ayuda por favor
ResponderEliminarMuchas graciassssss desde Venezuela!!!!! you saved my life!!
ResponderEliminarLa explicación mas clara de la red mil gracias sigue adelante ayudándonos a nosotros simples mortales
ResponderEliminarMuchas gracias. Funciona muy bien tu código. Gracias.
ResponderEliminarsirve muchas gracias pero para un puerto usb como seri
ResponderEliminarme gustaria saber para puerto usb
ResponderEliminarMuy Productivo y Elaborado Codigo...
ResponderEliminar...Felicidades y Gracias por iluminarnos a mucho de nosotro
desarrolladores, desorientados en este largo camino sin fin,
creando aplicaciones nueva!!!
Por otro lado, me preguntaba...
...si sabes
Como imprimir Códigos de Barras Bidimensional!!!
Muchas gracias, me has sacado un dolor de cabeza importante. Funciona perfectamente
ResponderEliminarmil gracias por tu gran apoyo, super bien explicado, funciona sin problemas, de nuevo mil gracias.
ResponderEliminar"El conocimiento no sirve de nada si no se comparte."