Componentes PrintDocument y PrintDialog
[Se incluye el código para imprimir un documento previamente configurado]

Fecha: 16/Jun/2005 (12/06/2005)
Autor: A. Percy Reyes Paredes

E_Mail: withoutlimits2983@hotmail.com - bigpercynet@hotmail.com

¡¡ Los peruanos SÍ podemos !!


Mucha veces tenemos la necesidad de incluir en nuestro proyecto la funcionalidad de imprimir directamente documentos que estemos trabajando, esto puede darse por ejemplo cuando estemos desarrollando un editor de texto o cuando estemos creando algún reporte de datos o resultados al final de alguna actividad. Bueno, esta vez trato de ahorrarte el trabajo, te expongo todo el código necesario para realizar esta tarea, sólo tendrás que adecuarlo a tu proyecto y copiar el código que se encuentra más abajo. Para esto es necesario usar un componente PrintDocument y un componente PrintDialog, ¿de qué se trata? ¿cuál es la funcionalidad de estos componentes?... a continuación te explico.

El componente PrintDocument de formularios Windows Forms se utiliza para establecer las propiedades que describen qué se imprime y la posibilidad de imprimir el documento entre distintas aplicaciones de Windows. Puede utilizarse junto con el componente PrintDialog para controlar todos los aspectos de la impresión de documentos.

Dos de los principales escenarios que implican al componente PrintDocument son:


Cuando se agrega a un formulario, el componente PrintDocument aparece en la bandeja de la parte inferior del Diseñador de Windows Forms.

El componente PrintDialog de formularios Windows Forms es un cuadro de diálogo preconfigurado, que se utiliza para seleccionar una impresora, elegir las páginas que se van a imprimir y determinar otras configuraciones relacionadas con la impresión en aplicaciones para Windows. Utilícelo como una solución sencilla para seleccionar configuraciones de la impresora o relacionadas con la impresora, en lugar de configurar un cuadro de diálogo propio. Puede permitir que los usuarios impriman diversas partes de sus documentos: imprimir todo, imprimir un intervalo de páginas seleccionado o imprimir una selección. Al basarse en cuadros de diálogo estándar de Windows, creará aplicaciones cuya funcionalidad básica resultará inmediatamente familiar para los usuarios. El componente PrintDialog se hereda de la clase CommonDialog.

Utilice el método ShowDialog para mostrar el cuadro de diálogo en tiempo de ejecución. Este componente tiene propiedades relacionadas con un único trabajo de impresión (clase PrintDocument) o con las configuraciones de una impresora individual (clase PrinterSettings). Cualquiera de ellas, a su vez, puede ser compartida por múltiples impresoras.

Cuando se agrega a un formulario, el componente PrintDialog aparece en la bandeja de la parte inferior del Diseñador de Windows Forms.

Para más información vea:

Componente PrintDocument

Componente PrintDialog

 

Ahora el siguiente paso es agregar en tu proyecto un componente PrintDocument y un componente PrintDialog, luego debes copiar este código de la manera como se muestra a continuación:

 

Private Sub VistaPrevia(ByVal TipoFuente As String, ByVal TamañoFuente As Byte, _
ByVal TextoImpresion As String, ByVal e As System.Drawing.Printing.PrintPageEventArgs)

Dim Fuente As New Font(TipoFuente, TamañoFuente)
Dim AreaImpresion_Alto, AreaImpresion_Ancho, MargenIzquierdo, MargenSuperior As Integer

With Me.PrintDocument1.DefaultPageSettings
'Area Neta de Impresion (se descuenta los margenes)
AreaImpresion_Alto = .PaperSize.Height - .Margins.Top - .Margins.Bottom
AreaImpresion_Ancho = .PaperSize.Width - .Margins.Left - .Margins.Right
MargenIzquierdo = .Margins.Left
MargenSuperior = .Margins.Top

'Verificar si se ha elegido el modo horizontal
If .Landscape Then
Dim NroTemp As Integer
NroTemp = AreaImpresion_Alto
AreaImpresion_Alto = AreaImpresion_Ancho
AreaImpresion_Ancho = NroTemp
End If
Dim Formato As New StringFormat(StringFormatFlags.LineLimit)
Dim Rectangulo As New RectangleF(MargenIzquierdo, MargenSuperior, _
AreaImpresion_Ancho, AreaImpresion_Alto)
Dim NroLineasImpresion As Integer = CInt(AreaImpresion_Alto / Fuente.Height)
Dim NroLineasRelleno, NroLetrasLinea As Integer
Static CaracterActual As Integer

e.Graphics.MeasureString(Mid(Me.ActiveMdiChild.Controls(0).Text, +1), Fuente, _
New SizeF(AreaImpresion_Ancho, AreaImpresion_Alto), Formato, NroLetrasLinea, _
NroLineasRelleno)
e.Graphics.DrawString(Mid(TextoImpresion, CaracterActual + 1), Fuente, _
Brushes.Black, Rectangulo, Formato)
CaracterActual += NroLetrasLinea
If CaracterActual < TextoImpresion.Length Then
e.HasMorePages = True
Else
e.HasMorePages = False
CaracterActual = 0
End If
End With

End Sub


'PrintDocument.PrintPage (Evento): Se produce cuando se necesita el 
'resultado que se va a imprimir para la página actual.

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) _
Handles PrintDocument1.PrintPage

VistaPrevia("Arial", 12, Me.ActiveMdiChild.Controls(0).Text, e)

End Sub


'Es aquí donde se pone en marcha la impresión del documento.
Private Sub MenuImprimir_Click(ByVal sender As System.Object, ByVal _
e As System.EventArgs) Handles MenuImprimir.Click

PrintDialog1.Document = PrintDocument1
If PrintDialog1.ShowDialog = DialogResult.OK Then
PrintDocument1.Print()
End If

End Sub

 

No olvides de darme tu voto en PanoramaBox, de esta manera seguiré compartiendo contigo lo que voy aprendiendo. Gracias.


Espacios de nombres usados en el código de este artículo:

System.Drawing.Drawing2D


Arbis Percy Reyes Paredes es peruano, tiene 21 años y se dedica a la construcción de software de manera profesional, joven desarrollador de aplicaciones Web y Servicios Web XML en VB .NET y C# .NET con bases de datos SQL Server 2000, aplicaciones basadas en Windows con VB .NET y C# .NET, VB 6.0, y controles y bibliotecas ActiveX; actualmente estudia en la Universidad Nacional de Trujillo, la carrera de Ingeniería de Sistemas. Le encanta el desarrollo de aplicaciones para dispositivos móviles tanto como la programación gráfica y programación avanzada de Videojuegos.


ir al índice