Informes e Impresiones
Informes e Impresiones
Informes e Impresiones
Windows Forms
Índice
Descripción ....................................................................................... 1
Lección: impresión desde una aplicación Windows Forms ......................... 2
Lección: utilizar la vista previa de impresión, opciones de página
y cajas de diálogo de impresión ......................................................... 12
Lección: creación del contenido del documento de impresión
utilizando GDI+ ............................................................................... 28
Lección: crear informes utilizando Crystal Reports ................................ 43
Informes e impresión en aplicaciones Windows Forms 1
Descripción
Introducción Esta lección describe cómo añadir soporte de impresión básico a una aplicación
Windows Forms. La mayoría de aplicaciones desarrolladas para Windows
incluyen la capacidad de imprimir alguna información. Visual Studio .NET
proporciona componentes que simplifican el proceso de impresión en nuestras
aplicaciones Windows Forms y nos provee control por todo el proceso de
impresión.
Objetivos de la lección Tras completar esta lección, seremos capaces de:
Añadir un control PrintDocument a un formulario y crear un procesador de
eventos PrintPage.
Añadir lógica de programación a un procedimiento de evento PrintPage
para construir el contenido de las páginas.
Añadir lógica de programación a un procedimiento de evento PrintPage
que permite a nuestra aplicación imprimir más de una página de contenido.
Informes e impresión en aplicaciones Windows Forms 3
What
What
About
About User
User
How?
How? 1. PrintDocument object Support?
Support?
• Enables printing
5. Print method
• Sends content to printer
4. Standard dialog boxes for
printing
But
But How
How Do
Do II • PrintPreviewDialog
Actually
Actually • PageSetupDialog
Print?
Print? • PrintDialog
Objeto PrintDocument
PrintDocument object
z Provides the ability to print a document
z Provides properties that describe what to print
PrintDocument
PrintDocument PrintDocument
PrintDocument PrintDocument
PrintDocument
Properties
Properties Events
Events Methods
Methods
DefaultPageSettings
DefaultPageSettings BeginPrint
BeginPrint Dispose
Dispose
DocumentName
DocumentName EndPrint
EndPrint Print
Print
PrintController
PrintController PrintPage
PrintPage
PrinterSettings
PrinterSettings QueryPageSettings
QueryPageSettings
Note: The check marks indicate the most commonly used properties, events,
and methods of the PrintDocument object
Para más información y una lista completa de las propiedades del objeto
PrintDocument, buscar en la documentación de ayuda de Visual Studio .NET
utilizando la frase miembros de PrintDocument.
Informes e impresión en aplicaciones Windows Forms 5
Para más información y una lista completa de las propiedades del objeto
PrintDocument, buscar en la documentación de ayuda de Visual Studio .NET
utilizando la frase miembros de PrintDocument.
Métodos de Una vez que hemos establecido la impresora y las opciones de página por
PrintDocument defecto y construido los contenidos del documento de impresión, utilizaremos
el método Print para iniciar el proceso de impresión. El método Print envía los
contenidos del documento de impresión a la impresora pasando el dispositivo
de impresión a un objeto Graphics que actúa de un contenedor para el
contenido. El objeto Graphics se discutirá en más detalle en el evento
PrintPage y el tópico PrintPageEventArgs en este módulo.
El método Dispose libera los recursos utilizados por el componente
PrintDocument.
Para más información y una lista completa de las propiedades del objeto
PrintDocument, buscar en la documentación de ayuda de Visual Studio .NET
utilizando la frase miembros de PrintDocument.
6 Informes e impresión en aplicaciones Windows Forms
PrintPage Event
PrintDocument
PrintDocument Object
Object
•• Specify
Specify print
print settings
settings
•• Add
Add printing
printing logic
logic to
to PrintPage
PrintPage
Print Event
Event
Print Method
Method •• Call
Call the
the Print
Print method
method
•• Calls
Calls PrintPage
PrintPage
•• Checks
Checks HasMorePages
HasMorePages
DIALOGS
DIALOGS
•• Document
Document property
property of
of the
the
Dialogs
Dialogs set
set to
to the
the
PrintDocument
PrintDocument object
object
Introducción Para imprimir desde una aplicación Windows Forms, utilizaremos un objeto
PrintDocument para definir la impresora y las características del trabajo de
impresión, añadir lógica de programación al evento PrintPage, proporcionar a
nuestros usuarios con soporte en tiempo de ejecución (utilizando los cuadros de
diálogo estándares de Visual Studio .NET) y llamar al método Print.
Procedimiento: activar la Para imprimir un documento de texto desde una aplicación Windows Forms,
impresión en una seguiremos el procedimiento siguiente:
aplicación Windows
Forms 1. Añadir una instancia de una clase PrintDocument a nuestra aplicación y crear
un procedimiento de evento PrintPage.
Para añadir un control PrintDocument a un formulario, abrir el Cuadro de
herramientas, y a continuación hacer doble clic en PrintDocument. Para crear
una subrutina PrintPage, abrir el formulario en el Editor de Código, hacer clic
en PrintDocument1 en la lista Nombre de clase, y a continuación hacer clic en
PrintPage en la lista Nombre de método.
2. Añadir lógica de programación a la subrutina PrintDocument1_PrintPage para
construir el contenido del documento de impresión.
Podemos utilizar la propiedad PageSettings para definir las regiones de texto y
gráficos sobre la página. Un sencillo ejemplo es asignar el valor de
PageSettings.Margins.Left a una variable que se utilizará para posicionar el
texto en el lado izquierdo de la página. Debemos utilizar los métodos de dibujo
de GDI+ del objeto PrintPageEventArgs.Graphics para construir los
contenidos de la página del documento de impresión.
3. Añadir soporte para vista previa de nuestro documento de impresión de modo
que podamos probar el código que hemos generado hasta este momento. Un
modo sencillo de previsualizar nuestro documento de impresión es añadir un
PrintPreviewControl a nuestro formulario desde el Cuadro de herramientas.
4. Añadir lógica de programación adicional a la subrutina
PrintDocument1_PrintPage que utiliza la propiedad HasMorePages para
indicar si deben o no imprimirse más páginas. El modo en que determinamos si
HasMorePages debería establecerse a True depende de cómo se construye
nuestro documento de impresión.
Informes e impresión en aplicaciones Windows Forms 9
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
Informes e impresión en aplicaciones Windows Forms 11
____________________________________________________________
PrintPreviewDialog
CodeExample
' maximize the size of the dialog box on the display screen
PrintPreviewDialog1.WindowState = FormWindowState.Maximized
End Sub
____________________________________________________________
16 Informes e impresión en aplicaciones Windows Forms
____________________________________________________________
____________________________________________________________
5. Cerrar la solución.
18 Informes e impresión en aplicaciones Windows Forms
Try
Dim pageDialog As New PageSetupDialog()
pageDialog.PageSettings = storedPageSettings
pageDialog.ShowDialog
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
PrintDocument1.DefaultPageSettings = storedPageSettings
End Sub
Personalizar secciones El usuario puede habilitar secciones del cuadro de diálogo PageSetup para
del cuadro de diálogo manipular la impresión, márgenes, la orientación del papel y el tamaño.
PageSetup
Utilizar las propiedades Margins y MinMargins para especificar los márgenes.
PageSetupDialog1.PageSettings.Margins.Top = 200
PageSetupDialog1.PageSettings.Margins.Left = 200
PageSetupDialog1.PageSettings.Margins.Bottom = 100
PageSetupDialog1.PageSettings.Margins.Right = 100
PageSetupDialog1.MinMargins.Top = 85
PageSetupDialog1.MinMargins.Left = 75
PageSetupDialog1.MinMargins.Bottom = 100
PageSetupDialog1.MinMargins.Right = 100
____________________________________________________________
Informes e impresión en aplicaciones Windows Forms 21
____________________________________________________________
____________________________________________________________
____________________________________________________________
Si el tiempo lo permite
Ë Examinar algunos miembros adicionales del control PageSetupDialog
1. En el Editor de código, examinar el código en la subrutina
pageSetupButton_Click.
2. Eliminar el carácter de comentario desde la parte frontal de las líneas de
código una sección a la vez y visualizar los cambios del cuadro de diálogo
PageSetup y Print Preview ejecutando la aplicación y abriendo los dos
cuadros de diálogo.
3. Cerrar la aplicación y Visual Studio .NET.
4. ¿Cómo podría utilizar estos miembros adicionales del control
PageSetupDialog?
Estos miembros adicionales deberían ser utilizados para personalizar
PageSetupDialog y controlar el rango de opciones que un usuario tiene
permitido seleccionar.
____________________________________________________________
____________________________________________________________
____________________________________________________________
Informes e impresión en aplicaciones Windows Forms 23
PrintDialog
PrintDialog1.Document = PrintDocument1
userResponse = PrintDialog1.ShowDialog()
End If
End Sub
Informes e impresión en aplicaciones Windows Forms 25
____________________________________________________________
26 Informes e impresión en aplicaciones Windows Forms
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
¿Qué es GDI+?
Introducción GDI+ es un interfaz de dispositivos gráficos que podemos utilizar para dibujar
gráficos vectoriales gráficos vectoriales bidimensionales, texto e imágenes de
mapas de bits. GDI+ expande las características de GDI proporcionando nuevas
funcionalidades como pinceles de gradiente (gradient brushes) y mezclas alfa
(alpha blending). GDI+ facilita y flexibiliza la programación gráfica. Permite a
las aplicaciones generar gráficos y texto formateado para la salida de vídeo y la
impresora. Permite también a los desarrolladores de aplicaciones crear
aplicaciones independientes del dispositivo. Por ejemplo, podemos crear una
subrutina PrintPage para construir contenido gráfico que puede ser impreso en
la mayoría de impresoras gráficas o que puede ser mostrado como vista previa
en una pantalla gráfica.
Tres parte de GDI+ Los servicios de GDI+ se dividen en tres categorías principales:
Gráficos vectoriales 2-D
Gráficos vectoriales implica dibujar líneas, curvas y figuras definidas por un
conjunto de puntos en un sistema de coordenadas. GDI+ proporciona clases
y estructuras que almacenan información sobre estos objetos. Por ejemplo,
el objeto Rectangle almacena información sobre la ubicación y el tamaño
de un rectángulo y la clase Graphics tiene métodos para dibujar líneas,
curvas y otras formas.
Texto
GDI+ nos permite dibujar texto en una amplia variedad de fuentes, tamaños
y estilos.
Imágenes
Ciertos gráficos no pueden ser visualizados como gráficos vectoriales 2-D y
deben ser visualizados como mapas de bits. GDI+ proporciona la clase
Bitmap para visualizar, manipular y guardar mapas de bits.
30 Informes e impresión en aplicaciones Windows Forms
'' draw
draw lines
lines or
or outlined
outlined shapes
shapes using
using aa Pen
Pen
myGraphic.DrawLine(myPen,X1,Y1,X2,Y2)
myGraphic.DrawLine(myPen,X1,Y1,X2,Y2)
'' draw
draw filled
filled shapes
shapes using
using aa Brush
Brush
myGraphic.FillRectangle(myBrush,X1,Y1,X2,Y2)
myGraphic.FillRectangle(myBrush,X1,Y1,X2,Y2)
'' draw
draw text
text using
using aa Font
Font and
and aa Brush
Brush
myGraphic.DrawString(myText,myFont,myBrush,X1,Y1)
myGraphic.DrawString(myText,myFont,myBrush,X1,Y1)
Introducción Para dibujar el texto, líneas y formas que forman el contenido de un documento
de impresión, debemos utilizar un objeto Graphics.
Rol del objeto Graphics El objeto Graphics es esencial a GDI+ en la construcción de contenido para el
en GDI+ documento de impresión. Proporciona la superficie de dibujo para los métodos
de dibujo de GDI+.
Para generar contenido del documento de impresión con GDI+:
Establecer las propiedades del objeto Graphics.
Invocar los métodos del objeto Graphics para dibujar texto, líneas y formas.
Métodos del objeto El objeto Graphics proporciona una extensa variedad de métodos que pueden
Graphics ser utilizados para dibujar texto, líneas y formas. También hay métodos para
escalar, transformar y medir los contenidos que pueden ser dibujados en su
superficie. Algunos de estos métodos más habituales se listan en la siguiente
tabla:
Método Descripción
Ejemplo El siguiente código muestra cómo dibujar objetos utilizando el objeto Graphics
proporcionado por el parámetro PrintPageEventArgs del evento
PrintDocument.PrintPage.
‘Create a graphics object
Dim myGraphic as Graphics
Introducción Utilizamos objetos Pen, Brush y Font para construir gráficos vectoriales 2-D,
texto e imágenes de mapas de bits con GDI+.
Procedimiento: crear Un lápiz se utiliza para dibujar líneas, curvas y formas con contorno. Para crear
lápices un nuevo lápiz, debemos especificar un color. También tenemos la opción de
especificar valores para las propiedades de anchura y estilo de línea:
1. Crear un nuevo lápiz.
El siguiente ejemplo de código ilustra la creación de lápices utilizando
distintas sintaxis.
Dim myBluePen As New Pen(Color.Blue)
Dim myRedPen as Pen = New Pen(Color.Red)
Dim myBlackPen As Pen = Pens.Black
Procedimiento: crear Objetos Brush se utilizan para dibujar texto y formas rellenas. Podemos crear
pinceles pinceles que producen rellenos Solid, Hatched, Textured y Gradient.
• Crear un nuevo Brush.
Los siguientes ejemplos de código demuestran la creación de un pincel azul
sólido y un pincel de gradiente linear utilizando blanco y azul claro
mezclados horizontalmente.
Dim myBrush As New SolidBrush(Color.Blue)
Dim myGradientBrush as New LinearGradientBrush( _
myRectangle As New Rectangle(0,0,100,100), _
Color.White, _
Color.LightBlue, _
LinearGradientMode.Horizontal)
Para más información sobre Hatched, Textured y Gradient, ver “Brushes and
Filled Shapes” en el Software Development Kit (SDK) del .NET Framework.
Procedimiento: crear Antes de que podamos pintar texto con GDI+, debemos construir un objeto
fuentes Font. La instrucción de declaración para un objeto Font puede incluir
parámetros para la FontFamily (como Arial), Size, Style y GraphicsUnits
utilizados por el parámetro Size. Las propiedades FontFamily y Size son
obligatorias cuando creamos una nueva fuente.
• Crear un nuevo objeto Font.
El siguiente ejemplo de código crea una fuente Arial de tamaño 10 y una
fuente Lucida con un estilo definido en negrita y 12 milímetros de tamaño.
Dim fontSmall As Font = New Font("Arial", 10)
Dim fontLarge As Font
fontLarge = New Font("Lucida", 12, _
FontStyle.Bold, GraphicsUnit.Millimeters)
34 Informes e impresión en aplicaciones Windows Forms
To draw text
1. Calculate the location for the text
2. Select the Font and Brush that you want to use for this text
3. Call the Graphics.DrawString method
e.Graphics.DrawString(myText,
e.Graphics.DrawString(myText, myFont,
myFont, myBrush,
myBrush, X1,
X1, Y1)
Y1)
To measure text
textWidth
textWidth == e.Graphics.MeasureString(myText,
e.Graphics.MeasureString(myText,
myFont).Width
myFont).Width
textHeight
textHeight == e.Graphics.MeasureString(myText,
e.Graphics.MeasureString(myText,
myFont).Height
myFont).Height
Procedimiento: medir • Para medir texto, añadir código como se muestra en el procesador de
texto eventos PrintPage.
El siguiente código mide la anchura y la altura de la cadena especificada.
textWidth = e.Graphics.MeasureString(myText, myFont).Width
textHeight = e.Graphics.MeasureString(myText,
myFont).Height
Finally
Finally
StreamToPrint.Close()
StreamToPrint.Close()
End
End Try
Try
End While
Else
e.HasMorePages = False
End If
38 Informes e impresión en aplicaciones Windows Forms
____________________________________________________________
____________________________________________________________
____________________________________________________________
Crystal Reports
How to Create and Format a Report by Using Crystal
Reports
How to View a Report by Using Crystal Report Viewer
How to Add DataSets to a Report
Practice: Creating and Viewing Crystal Reports
Introducción Hay muchas formas de presentar datos a los usuarios. Por ejemplo, podemos
escribir código que recorra conjuntos de resultados y los imprima dentro de
nuestra aplicación basada en Windows. Sin embargo, utilizando tales métodos,
cualquier trabajo más allá de dar un formato básico será complicado y
dificultoso de programar.
Con Crystal Reports para Microsoft Visual Studio .NET, podemos rápidamente
crear informes complejos y de apariencia profesional. En vez de escribir
código, utilizamos el interfaz de Crystal Report Designer para crear y formatear
el informe que necesitamos. El potente motor Report Engine procesa el criterio
de formateo, agrupación y creación de gráficos que especifiquemos.
Esta lección presenta Crystal Reports para Visual Studio .NET y también cubre
cómo utilizar El Asistente de informes para crear y formatear informes.
Objetivos de la lección Tras completar esta lección, seremos capaces de:
Explicar cómo Crystal Reports ayuda en la creación de informes.
Crear y formatear un informe utilizando Crystal Reports.
Visualizar un informe utilizando Crystal Report Viewer.
Añadir conjuntos de datos (datasets) a un informe.
44 Informes e impresión en aplicaciones Windows Forms
Crystal Reports
Crystal Reports
y Is the standard reporting tool in .NET
y Allows you to create a report from the beginning or use
one of the Report Expert Wizards
Benefits
y You can use any programming language
y Report viewers for Windows-based and Web applications
y Run-time customization of reports
y Easy interaction with reports
y Data visualization and analysis capabilities
http://msdn.microsoft.com/vstudio/partners/tools
/crystaldecisions.asp
Open
Open the
the Choose
Report Choose a
a Choose a
Report template
template data source
Expert
Expert
Introducción Podemos utilizar Crystal Reports para añadir capacidades de reporting a nuestra
aplicación. Crystal Reports nos permite crear un informe desde el principio o
utilizar el Asistente de informes, que nos ayuda a crear un informe utilizando un
asistente.
Procedimiento; crear y Para crear y formatear informes utilizando el Asistente de informes:
formatear un informe
utilizando el Asistente 1. Abrir el Asistente de informes.
de informes a. En el Explorador de soluciones, hacer clic con el botón derecho sobre el
nombre de proyecto, posicionarse en Agregar, y seleccionar Agregar
nuevo elemento desde el menú contextual.
b. En el cuadro de diálogo Agregar nuevo elemento, en el panel Plantillas,
hacer clic en Crystal Report.
c. En el cuadro Nombre, teclear un nombre de informe con extensión .rpt.
d. Hacer clic en Abrir para invocar el Diseñador Crystal Report, que nos
ayudará a crear y diseñar el nuevo informe.
e. En Galería de Crystal Report, seleccionar la opción Mediante el
Asistente de Informes.
2. Seleccionar una plantilla.
El Asistente de informes proporciona varias plantillas para crear un informe.
Algunas de las plantillas son las siguientes:
• Estándar
• Carta modelo
• Formulario
• Tablas cruzadas
• Subinforme
• Etiqueta
• Profundizar
46 Informes e impresión en aplicaciones Windows Forms
Introducción Visual Studio .NET incluye un control Crystal Report Viewer que nos permite
visualizar un informe en tiempo de ejecución. Para especificar el informe que
queremos visualizar, establecemos la propiedad ReportSource del
visualizador.
Procedimiento: Para visualizar un informe utilizando el control Crystal Report Viewer:
visualizar un informe
1. Añadir un control Crystal Report Viewer al formulario.
El Cuadro de herramientas de controles incluye el control Crystal Report
Viewer. Para añadir el control al formulario, arrastrar el control desde el
Cuadro de herramientas al formulario.
2. Establecer la propiedad ReportSource del visualizador.
El siguiente paso es establecer la propiedad ReportSource del visualizador
Crystal Report al nombre del informe que se visualizará. Podemos
establecer la propiedad ReportSource en la ventana Propiedades en tiempo
de diseño o en tiempo de ejecución.
3. Utilizar la propiedad ShowZoomButton para realizar zoom in o zoom out
en los informes.
El visualizador de Crystal Report incluye ShowZoomButton para realizar
zoom in o zoom out sobre los informes. Para activar esta propiedad,
establecer la propiedad ShowZoomButton a True en la ventana
Propiedades.
4. Utilizar la propiedad ShowPrintButton para imprimir el informe.
La propiedad ShowPrintButton nos permite imprimir el informe.
Establecer la propiedad ShowPrintButton a True para habilitar el botón en
el visualizador.
48 Informes e impresión en aplicaciones Windows Forms
Introducción Crystal Reports para Visual Studio .NET soporta crear informes que acceden a
datasets ADO.NET.
Procedimiento: añadir Para añadir un dataset ADO.NET a un informe:
un dataset ADO.NET a
un informe 1. Crear una instancia del informe.
Para que el informe visualice los datos en tiempo de ejecución, primero
debemos crear una instancia del informe:
Private rpt as New OrderHistory()
3. Poblar el dataset.
dsReportInfo.ReadXml("NorthwindData.xml")