viernes, 7 de marzo de 2008

Imprimir WindowsForms con vista previa en Visual Basic.NET.

En ocasiones tenemos la tarea de imprimir una pantalla o el área cliente de un formulario en tiempo de ejecución con información y controles.

La forma más fácil de hacerlo es utilizando el control PrintForm.

Para utilizarlo antes debemos descargar el PrintFormComponent 1.0 ó la versión más reciente ya que no viene por default. La versión utilizada en el ejemplo siguiente puede ser descargada del siguiente sitio:

http://msdn2.microsoft.com/en-us/vbasic/aa701261.aspx

Existen dos archivos de descarga llamados:

PrintFormSetup.exe y PrintFormSetup.msi descargamos el .PrintFormSetup.msi y lo instalamos.

Una vez instalado creamos un proyecto de Visual Basic para WindowsForms y seguimos los pasos siguientes:

1. ir al cuadro de herramientas principal en la sección Impresión donde podremos visualizar los controles, PagesetupDialog, PrintDialog, PrintDocument.. entre otros pero notar que no existe uno llamado PrintForm.

2. Dar clic derecho con el mouse y luego en Elegir elementos..

3. En la lista de componentes del NET Framework buscar y seleccionar PrintForm.

4. Aceptar y ver el control PrintForm que ha sido agregado al cuadro de herramientas en la sección Impresón.

Imprimir un Formulario windowsForm:

En el evento clic de un botón, colocar el siguiente código

PrintForm1.Print()

Propiedad PrintAction

Determina si la salida es enviada directamente a la impresora, si se debe mostrar la imagen en una ventana de vista previa, o guardar la imagen como un archivo PostScript encapsulado.

Los valores que admite la propiedad PrintAction son tres opciones :

  • Printing.PrintAction.PrintToPreview : Ventana de vista previa
  • Printing.PrintAction.PrintToFile : Imprimir a un archivo
  • Printing.PrintAction.PrintToPrinter : Imprimir

Pre visualizar un WindowsForm antes de imprimirlo utilizando PrintAction:

With PrintForm1

.PrintAction = Printing.PrintAction.PrintToPreview

.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.CompatibleModeClientAreaOnly)

End With

Imprimir hacia un archivo con la propiedad PrintAction

With PrintForm1
            .PrintAction = Printing.PrintAction.PrintToFile
            .PrintFileName = Ruta
            .Print()
End With 

Imprimir formulario scrollable

Por defecto, el printForm sólo imprime la parte visible del formulario

Si un usuario ha cambiado de tamaño el formulario en tiempo de ejecución, el resultado puede no ser el esperado.

El procedimiento siguiente muestra cómo imprimir el área cliente del Form desplegable incluso si se ha cambiado de tamaño en tiempo de ejecución.

Private Sub Button1_Click( _ByVal sender As System.Object, _ByVal e As
System.EventArgs)Handles Button1.Click
         With PrintForm1
            .PrintAction = Printing.PrintAction.PrintToPrinter
             .Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)
        End With
 End Sub 

Esta es la vista previa de un formulario antes de imprimirlo.

3 comentarios:

qqxqq dijo...

Hola!
Muy bien explicado y muy útil.
Gracias por el artículo.
Era justamente lo que necesitaba!

Maximo Alexandet dijo...

Es un estupendo ejemplo sin utilizar printDocument que es buenisimo aunque mas tedioso.
Gracias.

Maximo Alexandet dijo...

Muchas gracias esta buenisimo en post amigo.