Imprimir con el objeto Printer
Hay varias maneras de colocar texto y gráficos en el objeto Printer. Para imprimir con el objeto Printer, siga las instrucciones siguientes:
Asigne el miembro específico de la colección Printers al objeto Printer si quiere imprimir en una impresora distinta de la impresora predeterminada.
Coloque texto y gráficos en el objeto Printer.
Imprima el contenido del objeto Printer con los métodos NewPage o EndDoc.
Propiedades del objeto Printer
Las propiedades del objeto Printer coinciden inicialmente con las de la impresora predeterminada definida en el Panel de control de Windows. En tiempo de ejecución, puede establecer cualquiera de las propiedades del objeto Printer, entre las que se incluyen: PaperSize, Height, Width, Orientation, ColorMode, Duplex, TrackDefault, Zoom, DriverName, DeviceName, Port, Copies, PaperBin y PrintQuality. Para obtener más detalles y la sintaxis de estos métodos, vea la Referencia del lenguaje.
Si la propiedad TrackDefault es True y cambia la impresora predeterminada en el Panel de control de Windows, los valores de las propiedades del objeto Printer reflejarán las propiedades de la nueva impresora predeterminada.
No puede modificar algunas de las propiedades en medio de la impresión de una página una vez establecida la propiedad. La modificación de estas propiedades sólo afectará a las páginas siguientes. Las instrucciones siguientes muestran cómo puede imprimir cada página con una calidad de impresión diferente:
For pageno = 1 To 4
Printer.PrintQuality = -1 * pageno
Printer.Print "La calidad de esta página es"; pageno
Printer.NewPage
Next
Los valores de la calidad de impresión pueden variar de – 4 a – 1, o un entero positivo correspondiente a la resolución de la impresora en puntos por pulgada (PPP). Por ejemplo, el código siguiente establecería la resolución de la impresora a 300 PPP:
Printer.PrintQuality = 300
Para obtener más información Para obtener información acerca de las propiedades del objeto Printer, vea la propiedad correspondiente en la Referencia del lenguaje.
Nota El efecto de los valores de las propiedades del objeto Printer depende del controlador suministrado por el fabricante de la impresora. Puede que algunos valores no tengan efecto o que varios valores de propiedades diferentes tengan todos el mismo efecto. Los valores fuera del intervalo permitido puede que produzcan o no un error. Para obtener más información acerca de los controladores concretos, vea la documentación del fabricante.
Propiedades de escala
El objeto Printer tiene estas propiedades de escala:
ScaleMode
ScaleLeft y ScaleTop
ScaleWidth y ScaleHeight
Zoom
Las propiedades ScaleLeft y ScaleTop definen las coordenadas x e y, respectivamente, de la esquina superior izquierda de una página imprimible. Si modifica los valores de ScaleLeft y ScaleTop, puede crear los márgenes izquierdo y superior de la página impresa. Por ejemplo, puede usar ScaleLeft y ScaleTop para centrar un formulario impreso (PFrm) en la página, con estas instrucciones:
Printer.ScaleLeft = -((Printer.Width - PFrm.Width) / 2)
Printer.ScaleTop = -((Printer.Height - PFrm.Height) _
/ 2)
Muchas impresoras aceptan la propiedad Zoom. Esta propiedad define el porcentaje de escala del resultado. El valor predeterminado de la propiedad Zoom es 100, que indica que el resultado se imprimirá al 100 por ciento del tamaño (tamaño real). Puede usar la propiedad Zoom para reducir o ampliar la página con respecto al papel en el que se imprime. Por ejemplo, si Zoom es 50, la página impresa aparece con la mitad de alto y la mitad de ancho de la página de papel. La sintaxis siguiente establece la propiedad Zoom a la mitad del tamaño del objeto Printer predeterminado:
Printer.Zoom = 50
Colocar texto y gráficos
Puede establecer las propiedades CurrentX y CurrentY del objeto Printer, de la misma forma que para los formularios y los cuadros de imagen. Con el objeto Printer, estas propiedades determinan dónde se coloca el resultado en la página real. Las instrucciones siguientes establecen las coordenadas de dibujo a la esquina superior izquierda de la página actual:
Printer.CurrentX = 0
Printer.CurrentY = 0
También puede usar los métodos TextHeight y TextWidth para colocar texto en el objeto Printer. Para obtener más información acerca del uso de estos métodos de texto, vea "Presentar en una ubicación específica", anteriormente en este capítulo.
Imprimir formularios en el objeto Printer
Puede que le interese que la aplicación imprima uno o varios formularios junto con la información de dichos formularios, especialmente si el diseño del formulario corresponde a un documento impreso como una factura o una ficha de hora. La manera más sencilla de hacer esto es mediante el método PrintForm. Para obtener la mayor calidad en una impresora láser, utilice el método Print y los métodos gráficos con el objeto Printer. Recuerde que el uso del objeto Printer requiere más tiempo de desarrollo, puesto que tiene que volver a crear el formulario en el objeto Printer antes de imprimirlo.
Volver a crear un formulario en el objeto Printer también requiere volver a crear:
El esquema del formulario, incluidos el título y las barras de menús.
Los controles y su contenido, incluidos texto y gráficos.
El resultado de los métodos gráficos aplicado directamente al formulario, incluido el método Print.
El número de elementos que debe volver a crear en el objeto Printer depende de la aplicación y de la parte del formulario que necesite imprimir.
Volver a crear el texto y los gráficos de un formulario
Cuando cree texto y gráficos en un formulario mediante los métodos Print, Line, Circle, PaintPicture o PSet, puede que desee que una copia de esta resultado aparezca en el objeto Printer. La manera más sencilla de conseguirlo es escribir un procedimiento independiente del dispositivo que vuelva a crear el texto y los gráficos.
Por ejemplo, en el procedimiento siguiente se utiliza el método PaintPicture para imprimir la propiedad Picture de un formulario o de un control en cualquier objeto de resultado, como una impresora u otro formulario:
Sub PrintAnywhere (Src As Object, Dest As Object)
Dest.PaintPicture Src.Picture, Dest.Width / 2, _
Dest.Height / 2
If Dest Is Printer Then
Printer.EndDoc
End If
End Sub
Después, puede llamar a este procedimiento y pasarle los objetos de origen y de destino:
PrintAnywhere MiForm, Printer
PrintAnywhere MiForm, TuForm
Para obtener más información Para obtener más información, vea "Print (Método)", "Line (Método)", "Circle (Método)" "Pset (Método)" o "PaintPicture (Método)" en la Referencia del lenguaje.
Imprimir los controles de un formulario
El objeto Printer puede recibir el resultado del método Print y de los métodos gráficos, como los métodos Line o PSet. Pero no puede colocar controles directamente en el objeto Printer. Si la aplicación tiene que imprimir controles, debe escribir procedimientos que vuelvan a dibujar cada tipo de control utilizado en el objeto Printer o usar el método PrintForm.
Imprimir el contenido del objeto Printer
En cuanto haya colocado el texto y los gráficos en el objeto Printer, utilice el método EndDoc para imprimir el contenido. El método EndDoc avanza la página y envía todo el resultado pendiente a la cola. La cola intercepta el trabajo de impresión en su camino hacia la impresora y lo envía al disco o a la memoria, en donde se mantiene hasta que la impresora está preparada para recibirlo. Por ejemplo:
Printer.Print "Ésta es la primera línea de texto _
de una pareja."
Printer.Print "Ésta es la segunda línea de texto _
de la pareja."
Printer.EndDoc
Nota Visual Basic llama automáticamente a EndDoc si la aplicación termina sin haberlo llamado de forma explícita.
Crear documentos de múltiples páginas
Cuando imprima documentos grandes, puede especificar en el código dónde quiere que empiece una nueva página, mediante el método NewPage. Por ejemplo:
Printer.Print "Ésta es la página 1."
Printer.NewPage
Printer.Print "Ésta es la página 2."
Printer.EndDoc
Cancelar un trabajo de impresión
Puede terminar el trabajo de impresión actual mediante el método KillDoc. Por ejemplo, puede consultar al usuario, a través de un cuadro de diálogo, para determinar si se debe imprimir o terminar un documento:
Sub PrintOrNot()
Printer.Print "Ésta es la primera línea para " & _
"ilustrar el método KillDoc."
Printer.Print "Ésta es la segunda línea para " & _
"ilustrar el método KillDoc."
Printer.Print "Ésta es la tercera línea para " & _
"ilustrar el método KillDoc."
If vbNo = MsgBox("¿Desea imprimir el documento?", _
vbYesNo) Then
Printer.KillDoc
Else
Printer.EndDoc
End If
End Sub
Si el Administrador de impresión del sistema operativo controla el trabajo de impresión, el método KillDoc elimina todo el trabajo enviado a la impresora. Sin embargo, si el Administrador de impresión no controla el trabajo de impresión, puede que la página uno ya se haya enviado a la impresora y no se verá afectada por KillDoc. La cantidad de datos enviada a la impresora varía ligeramente de un controlador de impresora a otro.
Nota No puede usar el método KillDoc para terminar un trabajo de impresión iniciado con el método PrintForm.