Cambios dinámicos de parámetros a impresoras que manejan lenguaje PCL6 en Visual Basic.
Es muy normal que querramos cambiar algunas lineas de nuestra impresión cuando trabajamos enviando desde un formulario VisualBasic, por ejemplo el tamaño de papel, un renglón en negrita y hasta incluso el juego de caracteres que utiliza la impresora misma, para que cuando necesitamos imprimir un “ñ” sea esa letra y no otro carácter.
Cuando se envía una impresión en visual el juego de caracteres utilizado es el de Windows, pero suele ocurrir que la impresora tenga seteado otro y por ello ocurre que nos imprime algo distinto a lo que vemos es nuestro formulario o proyecto.
Nuestro ejemplo utiliza una impresora HP 2035, la cual utiliza PCL(Printer Command Language), que es un lenguaje muy sofisticado desarrollado por Hewlet Packard para impresoras làser.
En PCL existen comandos que tienen la forma de secuencias de escape, son cadenas de caracteres que comienzan con un carácter de escape. Para nuestro caso, cuando mandábamos a imprimir la letra “ñ” o algún otro carácter, salia impreso en forma incorrecta; veremos a continuación algunos de las secuencias de escape mas comunes y que hemos utilizado para que nuestra impresión salga correctamente.
Private Sub Command1_Click()
Const mvPrinter = "\\FS3\LASER_2300L"
Dim fileSystem As Object
Dim mvSQL As String
Dim mvColumna As Byte
Dim mvEtiqueta(3, 3) As String
wrenglon = 0
framesplash.Enabled = True
framesplash.Visible = True
framesplash.Refresh
frameListados.Enabled = False
Set rsArchivo = cndb.Execute("SELECT * FROM clientes WHERE calle '' and id_clase = 166 AND estado 'B' order by razon")
mvColumna = 1
Set fileSystem = CreateObject("Scripting.FileSystemObject")
If fileSystem.FileExists(mvArchivo) Then fileSystem.DeleteFile mvArchivo
' Seteo la Impresora
Open mvArchivo For Output As #1 ' Abro la Impresora
' Impresora Laser Hp 2035
Print #1, Chr(27) & "E"; ' Inicializo la Impresora
Print #1, Chr(27) & "&l26A"; ' Largo de página
Print #1, Chr(27) & "(0N"; ' Juego caracteres ISO 8859-1 para imprimir ñ,°,etc
Print #1, Chr(27) & "(s16H"; ' 12 DPI
Print #1, Chr(27) & "&l8D"; ' Espacio = 1/8"
Print #1, Chr(27) & "(s6B"; ' Negrita
Do While Not rsArchivo.EOF
mvArchivo(mvColumna, 1) = Space(3) & Left(rsArchivo("Razon"), 39)
mvArchivo(mvColumna, 2) = Space(3) & Left(rsArchivo("CalleNEW"), 39)
mvArchivo(mvColumna, 3) = Space(3) & Left(rsArchivo("CodPostal"), 39)
mvColumna = mvColumna + 1
If mvColumna > 3 Then
' Ya tengo 3 columnas
Imprimir mvArchivo
mvColumna = 1
End If
rsArchivo.MoveNext
DoEvents
Loop
If mvColumna > 1 Then
' Imprimo la columna restante
Imprimir mvArchivo
End If
Print #1, Chr(27) & "&l0H"; ' Salto de página
Close #1
fileSystem.CopyFile mvArchivo, mvPrinter ‘Impresión del reporte
Set fileSystem = Nothing
framesplash.Enabled = False
framesplash.Visible = False
framesplash.Refresh
MsgBox "Proceso Finalizado", vbExclamation, "Impresión de Informe"
End Sub
.
.
.
Private Sub Imprimir(ByRef mvE() As String)
Dim mvI As Byte
Dim mvRenglon As String
For mvI = 1 To 3
mvRenglon = Left(mvE(1, mvI) & Space(40), 40) & " " & Left(mvE(2, mvI) & Space(40), 40) & " " & Left(mvE(3, mvI) & Space(40), 40)
Print #1, mvRenglon
Print #1,
mvE(1, mvI) = Space(40)
mvE(2, mvI) = Space(40)
mvE(3, mvI) = Space(40)
Next
wrenglon = wrenglon + 1 ' Controla el salto de pagina
If wrenglon < 9 Then
Print #1, Chr(10)
Print #1, Chr(10)
Else
Print #1, Chr(27) & "&l0H"; ' Salto de página
wrenglon = 0
End If
End Sub
Estas lineas de còdigo corresponden a un programa que toma algunos datos de un archivo de clientes y arma un reporte a 3 columnas por 9 filas, donde se consigna la razón social, la calle y el código postal, y lo deja en un archivo de texto dentro del disco y ademàs es impreso.
Espero sea de utilidad………






