Componentes PrintDocument y PrintDialog Fecha: 16/Jun/2005 (12/06/2005) E_Mail: [email protected] - [email protected] ¡¡ 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:
- Trabajos de impresión sencillos, tales como la impresión de un archivo de texto individual. En este caso, deberá agregar el componente PrintDocument a un formulario Windows Forms y, a continuación, agregar la lógica de programación que imprime un archivo al controlador de eventos PrintPage. La lógica de programación debe culminar en el método Print, para imprimir el documento. Este método envía a la impresora un objeto Graphics, contenido en la propiedad Graphics de la clase PrintPageEventArgs.
- Trabajos de impresión más complejos como, por ejemplo, una situación en la que se desee reutilizar la lógica de impresión escrita. En este caso, deberá derivar un nuevo componente del componente PrintDocument y reemplazar (vea Valores de reemplazo para Visual Basic o valor de reemplazo para C#) el evento PrintPage.
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:
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.