Discussion:
Impresora de tickets - ASCII a MS-DOS
(demasiado antiguo para responder)
Shania
2004-06-24 08:53:38 UTC
Permalink
Hola!
Tengo una impresora de tickets que cuando imprime palabras
con acentos o "ñ"s escribe un símbolo raro en lugar de
la "ñ" o de la letra que contiene el acento.
Me gustaría saber si alguno de vosotros sabe de alguna
función que pase los caracteres ASCII a modo MS-DOS en
VB.NET.

Muchas gracias.
Un saludo.
rol
2004-06-24 14:31:26 UTC
Permalink
Curiosamente hace unos dias he tenido el mismo problema que tu pero no
lo he resuleto de la forma que tu quieres hacerlo porque tenía que escribir
directamente a puerto y esto me ocasionaba otros problemas. A pesar de ello
te voy a poner el código que pille por la red que puedes trasladar
exactamente igual a tu código .net.

Pero antes te explico como lo he resuelto yo:
He configurado en el panel de control la impresora como Generic / Text
Only en el puerto LPT1 y la he configurado como impresora predeterminada.
Además, en las propiedades de la impresora le he puesto como fuente
Multilingue Latin 1 (850) (esto es lo que realmente hace la traduccion entre
los juegos de caracteres que tu necesitas). De esta forma y en combinacion
con una dll que he construido en VB6 usando el objeto printer y que luego he
incorporado a mi proyecto vb.net , he conseguido imprimir en la impresora de
tickets como si estuviera imprimiendo desde MS-DOS.

Ahí va el código (copialo y pegalo en tu proyecto):

Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As
String, ByVal lpszDst As String) As Long
Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As
String, ByVal lpszDst As String) As Long


Public Function TextoMSDOS(Cadena As String) As String
'Convierte una cadena de texto msdos (ASCII) o texto OEM a texto ANSI
deWindows.
'Ver funcion TextoWinAMSDOS es la inversa a esta
'Tonecho 7.3.98
'Necesita la declaracion de funcion API
'Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc
As String, ByVal lpszDst As String) As Long
Dim tmpAA As String
Dim tmpBB As String

tmpAA = Trim$(Cadena)
tmpBB = Space(255)
Call OemToChar(tmpAA, tmpBB)
tmpBB = Trim$(tmpBB)
If Len(tmpBB) > 1 Then tmpBB = Left$(tmpBB, Len(tmpBB) - 1)
If Trim$(tmpBB) = "" Then tmpBB = " "
TextoMSDOS = tmpBB
End Function

Public Function TextoWinAMSDOS(Cadena As String) As String
'Pasa una cadena de ansi (windows) a ASCII (msdos).
'Evita problemas de conversión de acentos y eñes
'Ver funcion TextoMSDOS es la inversa a esta
'Tonecho 7.3.98
Dim x As String
x = Space$(Len(Cadena))
CharToOem Cadena, x
TextoWinAMSDOS = x
End Function




Hola!
Tengo una impresora de tickets que cuando imprime palabras
con acentos o "ñ"s escribe un símbolo raro en lugar de
la "ñ" o de la letra que contiene el acento.
Me gustaría saber si alguno de vosotros sabe de alguna
función que pase los caracteres ASCII a modo MS-DOS en
VB.NET.

Muchas gracias.
Un saludo.
Shania
2004-06-25 08:18:01 UTC
Permalink
Hola!
Muchísimas gracias por tu ayuda, ya pensaba que nadie me
podía ayudar.
Ahora mismo lo voy a probar.
Un saludo
-----Mensaje original-----
Curiosamente hace unos dias he tenido el mismo
problema que tu pero no
lo he resuleto de la forma que tu quieres hacerlo porque
tenía que escribir
directamente a puerto y esto me ocasionaba otros
problemas. A pesar de ello
te voy a poner el código que pille por la red que puedes
trasladar
exactamente igual a tu código .net.
He configurado en el panel de control la impresora
como Generic / Text
Only en el puerto LPT1 y la he configurado como impresora
predeterminada.
Además, en las propiedades de la impresora le he puesto
como fuente
Multilingue Latin 1 (850) (esto es lo que realmente hace
la traduccion entre
los juegos de caracteres que tu necesitas). De esta forma
y en combinacion
con una dll que he construido en VB6 usando el objeto
printer y que luego he
incorporado a mi proyecto vb.net , he conseguido imprimir
en la impresora de
tickets como si estuviera imprimiendo desde MS-DOS.
Declare Function OemToChar Lib "user32"
Alias "OemToCharA" (ByVal lpszSrc As
String, ByVal lpszDst As String) As Long
Declare Function CharToOem Lib "user32"
Alias "CharToOemA" (ByVal lpszSrc As
String, ByVal lpszDst As String) As Long
Public Function TextoMSDOS(Cadena As String) As String
'Convierte una cadena de texto msdos (ASCII) o texto OEM
a texto ANSI
deWindows.
'Ver funcion TextoWinAMSDOS es la inversa a esta
'Tonecho 7.3.98
'Necesita la declaracion de funcion API
'Declare Function OemToChar Lib "user32"
Alias "OemToCharA" (ByVal lpszSrc
As String, ByVal lpszDst As String) As Long
Dim tmpAA As String
Dim tmpBB As String
tmpAA = Trim$(Cadena)
tmpBB = Space(255)
Call OemToChar(tmpAA, tmpBB)
tmpBB = Trim$(tmpBB)
If Len(tmpBB) > 1 Then tmpBB = Left$(tmpBB, Len
(tmpBB) - 1)
If Trim$(tmpBB) = "" Then tmpBB = " "
TextoMSDOS = tmpBB
End Function
Public Function TextoWinAMSDOS(Cadena As String) As String
'Pasa una cadena de ansi (windows) a ASCII (msdos).
'Evita problemas de conversión de acentos y eñes
'Ver funcion TextoMSDOS es la inversa a esta
'Tonecho 7.3.98
Dim x As String
x = Space$(Len(Cadena))
CharToOem Cadena, x
TextoWinAMSDOS = x
End Function
Hola!
Tengo una impresora de tickets que cuando imprime palabras
con acentos o "ñ"s escribe un símbolo raro en lugar de
la "ñ" o de la letra que contiene el acento.
Me gustaría saber si alguno de vosotros sabe de alguna
función que pase los caracteres ASCII a modo MS-DOS en
VB.NET.
Muchas gracias.
Un saludo.
.
rol
2004-06-24 14:36:05 UTC
Permalink
Te envío también el código de la dll que he realizado en vb.6 por si
necesitas usarlo:

Public Sub WriteLine(ByVal value As String)
'Para imprimir la cadena de texto que quiero enviar a la impresora
Printer.Print value
End Sub
Public Sub EndDoc()
Printer.EndDoc
End Sub
Public Sub FontName(ByVal value As String)
Printer.FontName = value
End Sub
Public Sub ForeColorRed(ByVal value As Boolean)
If value Then
Printer.ForeColor = RGB(255, 0, 0)
Else
Printer.ForeColor = RGB(0, 0, 0)
End If
End Sub
Public Sub FontSize(ByVal value As Integer)
Printer.Font.Size = value
End Sub
Public Sub FontBold(ByVal value As Boolean)
Printer.Font.Bold = value
End Sub
Public Sub OpenCashDrawer()
'Para abrir el cajón
Open "LPT1:" For Output As #1
'La secuencia de escape puede ser otra para tu impresora
'consulta el manual
Print #1, Chr$(27) + Chr$(112) + Chr$(0) + Chr$(48)
Close #1
End Sub
Public Sub PosicionX(ByVal value As Integer)
Printer.CurrentX = value
End Sub
Public Sub LineFeed(ByVal value As Integer)
'Para hacer line feed en la impresora el numero de lineas
'indicado en value
Dim i As Integer
If value >= 1 Then
Open "LPT1" For Output As #1
For i = 1 To value
'La secuencia de escape puede ser otra para tu impresora
'consulta el manual
Print #1, Chr$(&H1B) & Chr$(&H64) & Chr$(value)
Next i
Close #1
End If

End Sub

"Shania" <***@discussions.microsoft.com> escribi� en el mensaje news:20c7601c459c8$bde18020$***@phx.gbl...
Hola!
Tengo una impresora de tickets que cuando imprime palabras
con acentos o "ñ"s escribe un símbolo raro en lugar de
la "ñ" o de la letra que contiene el acento.
Me gustaría saber si alguno de vosotros sabe de alguna
función que pase los caracteres ASCII a modo MS-DOS en
VB.NET.

Muchas gracias.
Un saludo.
Loading...