Cambios de parámetros a impresoras que manejan lenguaje PCL6 en Visual Basic.

Nota Vista 5.417 Veces

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………

Marcelo Luques Marcelo Luques  (13 Posts)


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© VB-MUNDO – Programacion Visual
CyberChimps