You are on page 1of 52

Informes e impresión en aplicaciones

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

„ Printing from a Windows Forms Application


„ Using the Print Preview, Page Setup, and Print Dialogs
„ Constructing Print Document Content by Using GDI+
„ Creating Reports by Using Crystal Reports

Introducción Cualquier aplicación desarrollada para el sistema operativo Microsoft®


Windows® que maneja datos debería incluir características de informes e
impresión para los usuarios. Este módulo explora cómo implementar impresión
en una aplicación Windows Forms y cómo crear informes en una aplicación
Windows Forms utilizando Crystal Reports Microsoft Visual Studio® .NET.
Objetivos Tras completar este módulo, podremos:
„ Imprimir documentos en una aplicación Windows Forms
„ Utilizar las cajas de diálogo de Visual Studio .NET en una aplicación
Windows Forms
„ Utilizar GDI+ para construir contenido sobre documentos de impresión
„ Crear y formatear informes utilizando Crystal Reports.
2 Informes e impresión en aplicaciones Windows Forms

Lección: impresión desde una aplicación Windows


Forms

„ How Printing Works in a .NET Windows Forms


Application
„ PrintDocument Object
„ PrintPage Event and PrintPageEventArgs
„ How to Enable Printing in a Windows Forms
Application
„ Practice: Adding Print Support to a Windows Forms
Application

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

Cómo funciona la impresión en una aplicación Windows Forms


Again,
Again,
How?
How?
2. PrintPage event 3. PrintPageEventArgs parameter
• Construct content • PageSettings property
• Support multi-page docs • Graphics object
• HasMorePages property

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

Introducción Los desarrolladores de aplicaciones que utilizan Windows Forms utilizarán la


clase PrintDocument para soportar la impresión en sus aplicaciones Windows
Forms de .NET. Sin embargo, el objeto PrintDocument no es el único
componente que usaremos cuando imprimamos documentos en aplicaciones
Windows Forms.
Procedimiento de 1. Añadir el objeto PrintDocument.
impresión
El objeto PrintDocument es esencial en la impresión de aplicaciones en
Windows Forms.
2. Crear el procesador de eventos PrintPage.
El objeto PrintDocument utiliza la lógica de programa que hemos creado
en el evento PrintDocument.PrintPage para construir el contenido del
documento de impresión e indica cuando deben generarse páginas
adicionales.
3. Utilizar el parámetro PrintPageEventArgs.
El evento PrintPage utiliza el parámetro PrintPageEventArgs que recibe
para acceder y almacenar información sobre el documento de impresión.
Las aplicaciones generalmente utilizarán la propiedad PageSettings para
leer información sobre la presentación del documento, construir el
contenido de la página dibujando texto y gráficos en el objeto, e indicar
cuando deben generarse páginas adicionales estableciendo la propiedad
HasMorePages.
4. Utilizar las cajas de diálogo disponibles en Visual Studio .NET.
Podemos añadir soporte de usuario utilizando las tres cajas de diálogo
proporcionadas en la vista Diseño del Cuadro de herramientas. Los cuadros
de diálogo estándares proporcionan un modo fácil de añadir un potente
soporte de usuario final en nuestras aplicaciones con un interfaz de usuario
familiar.
5. Imprimir el documento utilizando el método Print. El método
PrintDocument.Print se utiliza para permitir la impresión del documento
actual.
4 Informes e impresión en aplicaciones Windows Forms

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

Introducción El objeto PrintDocument es esencial para la impresión en aplicaciones


Windows Forms. Utilizamos PrintDocument para establecer propiedades que
especifican qué imprimir y proporcionar las propiedades, eventos y métodos
requeridos para imprimir documentos. El objeto PrintDocument generalmente
se añade a un formulario desde el Cuadro de herramientas en tiempo de diseño,
pero una instancia de la clase PrintDocument puede declararse también en
tiempo de ejecución.
Propiedades de La propiedad DefaultPageSettings obtiene o establece las opciones de páginas
PrintDocument que son utilizadas como opciones por defecto para todas las páginas a imprimir.
La propiedad PrinterSettings puede utilizarse para obtener o establecer la
impresora que imprime el documento, modificar las propiedades de la
impresora seleccionada y modificar las opciones asociadas con el trabajo de
impresión como el número de copias a imprimir.
La siguiente tabla describe algunas propiedades adicionales del objeto
PrintDocument que utilizaremos para personalizar un trabajo de impresión:
Propiedad Descripción

DocumentName Obtiene o establece el nombre del documento a visualizar


mientras se imprime el documento.
PrintController Obtiene o establece el controlador de impresión que guía
el proceso de impresión.

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

Eventos de El evento PrintPage se utiliza para generar el contenido del documento de


PrintDocument impresión y es en el controlador de eventos PrintPage que debemos incluir
nuestro propio código para indicar cuando el documento tiene páginas
adicionales de contenido a imprimir.
La siguiente tabla describe algunos eventos adicionales del objeto
PrintDocument que nos permiten imprimir salida.
Evento Descripción

BeginPrint Ocurre cuando el método Print se invoca y antes de que la


primera página del documento se imprima. Un ejemplo de
cuando utilizar BeginPrint es cuando queremos notificar al
usuario cuantas páginas hay en un trabajo de impresión.
EndPrint Ocurre cuando la última página del documento se ha impreso.
Un ejemplo de uso de EndPrint es cuando queremos avisar al
usuario de que se ha completado el trabajo de impresión.
QueryPageSettings Ocurre inmediatamente antes de cada evento PrintPage.
Podemos usar QueryPageSettings cuando queremos utilizar
diferentes opciones PageSettings para una o más páginas de un
documento de impresión.

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

Evento PrintPage y PrintPageEventArgs

PrintPage Event

• The PrintPage event includes


two parameters: an object
PrintPagesEventArgs Object
representing the Sender and a
PrintPageEventsArgs object • The PrintPageEventArgs
• The PrintPage event object provides the
components required to
procedure contains the
construct the pages of the
programming logic that print document
constructs the contents of the
• PageSettings, Graphics,
print document and ensures
and HasMorePages are
that the entire print document the critical members
is printed

Introducción Un evento PrintDocument.PrintPage ocurre para cada página de un


documento de impresión que se visualiza o imprime. Creamos una subrutina
para gestionar un evento PrintPage y la poblamos con el código utilizado para
construir el contenido del documento de impresión.
Procedimiento de El procedimiento de evento que procesa el evento PrintDocument.PrintPage
evento PrintPage tiene dos parámetros: el objeto que representa al emisor que dispara el evento
(PrintDocument) y el objeto PrintPageEventArgs. La subrutina que creamos
para procesar el evento PrintPage contiene la lógica de programación requerida
para construir el documento de impresión (utilizando los componentes
proporcionados por el objeto PrintPageEventArgs). El procedimiento de
evento PrintPage también contiene lógica de programación que nosotros
desarrollamos para indicar cuando debe generarse una página adicional de
contenido.
Miembros del parámetro El parámetro PrintPageEventArgs contiene todos los datos requeridos para
PrintPageEventArgs construir una página del documento de impresión. El objeto
PrintPageEventArgs tiene seis componentes miembro, incluyendo el objeto
Graphics que se utiliza como el “papel” sobre el que se dibujan los contenidos
de una página. Los otros dos miembros más críticos son la propiedad
HasMorePages que debemos establecer a True cuando hay más páginas a
imprimir y la propiedad PageSettings que puede utilizarse para leer los valores
de configuración de la página para la página actual.
Las otras tres propiedades del parámetro PrintPageEventArgs son Cancel,
MarginBounds y PrintBounds. Podemos utilizar la propiedad Cancel para
detener la construcción de las páginas del documento antes del final de la
impresión del mismo y las propiedades PagesBounds y MarginBounds para
devolver el tamaño de la página actual y el tamaño de la página dentro de los
márgenes, respectivamente (ambos pueden ser determinados por la propiedad
PageSettings).
Informes e impresión en aplicaciones Windows Forms 7

PrintPageEventArgs. La propiedad PageSettings proporcionada por el parámetro


PageSettings PrintPageEventArgs es una propiedad de modo lectura utilizada para obtener
las opciones de la página para la página actual. PageSettings incluye los
miembros Bounds y Margins que proporcionan la misma información que
encontramos en las propiedades PageBounds y MarginBounds.

Nota Para modificar las opciones de página, debemos procesar el evento


QueryPageSettings del objeto PrintDocument.

El siguiente ejemplo demuestra cómo utilizar las propiedades PageSettings y


MarginBounds dentro de un procesador de eventos PrintPage para determinar
la ubicación del margen izquierdo y el número de líneas de texto que cabrán en
una página dada una fuente determinada.

LeftMargin = e.PageSettings.Margins.Left
LinesPP = e.MarginBounds.Height/myFont.GetHeight(e.Graphics)

PrintPageEventArgs. El objeto Graphics proporcionado por el parámetro PrintPageEventArgs actúa


Graphics como un contenedor para cada página de un documento de impresión.
Utilizamos los métodos de dibujo de GDI+ del objeto Graphics para dibujar los
contenidos de texto y gráficos de la página. Por ejemplo, para dibujar una
cadena de texto dentro de un procesador de eventos PrintPage, podríamos
utilizar el método Graphics.DrawString como sigue:

e.Graphics.DrawString(textString, myFont, myBrush, X, Y)

PrintPageEventsArgs. La propiedad HasMorePages proporcionada por el parámetro


HasMorePages PrintPageEventArgs es un valor Boolean que es False por defecto. Debemos
establecer manualmente de la propiedad HasMorePages a True para indicar
que debería imprimirse una página adicional. El siguiente ejemplo demuestra
cómo establecer la propiedad HasMorePages a True cuando la siguiente línea
de texto debería estar por debajo del margen inferior de la página.

While CurrentLine < LinesPerPage
textLine = StreamToPrint.ReadLine()
If textLine Is Nothing Then Exit While
<draw textLine and increment CurrentLine>
End While

If Not (textLine Is Nothing) Then


e.HasMorePages = True
Else
e.HasMorePages = False
End If

8 Informes e impresión en aplicaciones Windows Forms

Cómo habilitar la impresión en una aplicación Windows Forms


Print
Print Page
Page Event
Event
PrintPagesEventArgs
PrintPagesEventArgs Class
Class
•• Use PrintPageEventArgs
Use the
the • Graphics Object
class
class to
to read
read page
page settings
settings such
such
as
as margins
margins and
and page
page height
height and
and • HasMorePages
width
width • PageSettings
•• Establish
Establish fonts
fonts and
and brushes
brushes used
used
in
in your
your output
output
•• Establish
Establish regions
regions on
on the
the page
page
•• Construct
Construct output
output by
by positioning
positioning
text
text and
and graphics
graphics byby using
using the
the
methods
methods of of the
the Graphics
Graphics class
class DefaultPageSettings
DefaultPageSettings

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

Práctica: añadir soporte de impresión a una aplicación Windows


Forms

In this practice, you will


z Add a PrintDocument control to a project
z Create a PrintPage event procedure and
develop code to construct the contents of
a print document
z Set the value of the HasMorePages
property to indicate when more pages
should be printed

Begin reviewing the objectives


10 min
for this practice activity

Introducción En esta práctica, añadiremos soporte de impresión a una aplicación Windows


Forms. La práctica consiste en añadir un control PrintDocument a un proyecto,
crear una subrutina para procesar el evento PrintPage, añadir lógica de
programación a la subrutina PrintPage, y utilizar la propiedad HasMorePages.
Surgirán algunas cuestiones en alguno de los pasos. Intentar encontrar la
respuesta antes de pasar al siguiente paso..
Instrucciones
Ë Abrir el proyecto de la práctica
1. Usar Windows Explorer para buscar en la carpeta pract01\Starter que se
puede encontrar dentro del fichero practs13.zip.
2. Hacer doble clic en el archivo de solución PrintProcess.sln para abrir el
proyecto.
10 Informes e impresión en aplicaciones Windows Forms

Ë Añadir el control PrintDocument a nuestra aplicación


1. En el Explorador de soluciones, hacer clic en Form1.vb, y a continuación
en el icono Ver diseñador.
2. En el Cuadro de herramientas, desplacémonos hacia abajo hasta que
aparezca el control PrintDocument, y hacer doble clic sobre él.
3. ¿Qué funcionalidad proporciona la clase PrintDocument a nuestra
aplicación?
La clase PrintDocument permite a una aplicación Windows Forms
iniciar el proceso de impresión (invocando al método
PrintDocument.Print) y proporciona acceso a las opciones de impresión
y páginas que pueden ser utilizadas para controlar la apariencia de
nuestro documento de impresión.
____________________________________________________________

____________________________________________________________

____________________________________________________________

____________________________________________________________

Ë Crear una subrutina PrintPage personalizada


1. En el Explorador de soluciones, hacer clic en Form1.vb, y a continuación
sobre el icono Ver código.
2. En la lista Nombre de clase, hacer clic en PrintDocument1.
3. En la lista Nombre de método, hacer clic en PrintPage.
4. Cambiar el nombre de la subrutina que procesa el evento
PrintDocument.PrintPage de PrintDocument1_PrintPage a MyPrintPage.
5. ¿Cual es el propósito del evento PrintDocument.PrintPage?
Utilizaremos la subrutina que procesa el evento
PrintDocument.PrintPage para construir cada página de un documento
de impresión individualmente, para controlar el número de páginas del
documento de impresión que se crearán, ajustar las opciones de página
de un documento de impresión y para cancelar un trabajo de impresión
cuando sea necesario. El objeto Graphics del parámetro
PrintPageEventArgs se utiliza para construir los contenidos de cada
página individualmente. El objeto Graphics se enviará al dispositivo de
impresión utilizando el método PrintDocument.Print.
____________________________________________________________

____________________________________________________________

____________________________________________________________

____________________________________________________________
Informes e impresión en aplicaciones Windows Forms 11

6. Añadir las sentencias de código siguientes a la subrutina MyPrintPage:


e.Graghics.Drawstring("Page " & currentPage.ToString & _
" text will go here.", myFont, myBrush, X, Y)

If currentPage < totalPages Then


currentPage += 1
End If

7. Presionar F5, y a continuación hacer clic en Print Preview.


8. Cerrar el cuadro de diálogo PrintPreviewDialog.
9. Utilizar el control NumericUpDown para añadir una segunda página a
nuestro documento de impresión y a continuación realizar una vista previa
de nuestro documento de nuevo.
10. ¿Por qué nuestra aplicación no muestra más que una página?
La propiedad HasMorePages del objeto PrintPageEventArgs está en
False por defecto. Debemos desarrollar la lógica de programación para
un bucle de impresión cuando el trabajo de impresión incluye más de
una página en el documento.
____________________________________________________________

____________________________________________________________

11. Cerrar la aplicación PrintProcess.

Ë Crear un bucle de impresión para garantizar que se imprimen todas las


páginas del documento
1. Modificar los contenidos de la sentencia If-Then-Else cerca del final de
nuestra subrutina MyPrintPage de modo que sea similar a la siguiente:
If currentPage < totalPages Then
currentPage += 1
e.HasMorePages = True
Else
e.HasMorePages = False
End If

2. Iniciar la aplicación PrintProcess.


3. Utilizar el control NumericUpDown para añadir una segunda página a
nuestro documento y a continuación realizar una vista previa de nuestro
documento de impresión de nuevo. Deberíamos ahora ser capaces de ver
ambas páginas de nuestro documento de impresión.

Ë Cerrar la aplicación y Visual Studio .NET


Se el tiempo lo permite, utilicemos los dos botones de la parte inferior de
Form1 para mostrar alguna información adicional que está disponible a través
del objeto PrintDocument y a continuación examinar el código subyacente.
1. Guardar la aplicación PrintProcess.
2. Cerrar la aplicación PrintProcess.
3. Cerrar Visual Studio .NET
12 Informes e impresión en aplicaciones Windows Forms

Lección: utilizar la vista previa de impresión, opciones de


página y cajas de diálogo de impresión

„ How to Use the PrintPreviewDialog Control


„ Practice: Using the PrintPreviewDialog Control
„ How to Use the PageSetupDialog Control
„ Practice: Using the PageSetupDialog Control
„ How to Use the PrintDialog Control
„ Practice: Using the PrintDialog Control

Introducción Visual Studio .NET incluye tres cuadros de diálogo preconfigurados:


PrintPreviewDialog, PageSetupDialog y PrintDialog, que permiten a nuestra
aplicación de usuario realizar una vista previa de un documento de impresión,
especificar las opciones de páginas y establecer las opciones de impresora y de
los trabajos de impresión desde una aplicación Windows Forms. Utilizar estos
cuadros de diálogo preconfigurados en una aplicación Windows Forms no sólo
facilita el desarrollo, sino que también proporciona un interfaz limpio eficiente
y familiar a los usuarios finales. Esta lección explica cómo utilizar los tres
cuadros de diálogo en una aplicación Windows Forms.
Objetivos de la lección Tras completar esta lección, seremos capaces de:
„ Disponer de una vista previa del documento de impresión utilizando los
controles PrintPreviewDialog y PrintPreviewControl.
„ Utilizar un control PrintPreviewControl para previsualizar nuestro
documento de impresión.
„ Especificar las opciones de páginas de un documento utilizando el control
PageSetupDialog.
„ Seleccionar una impresora y opciones para el trabajo de impresión
utilizando el control PrintDialog.
Informes e impresión en aplicaciones Windows Forms 13

Cómo utilizar el control PrintPreviewDialog

PrintPreviewDialog

„ Use PrintPreviewDialog to display how a document will


appear when printed
„ To display a print preview of a document
1. Create an instance of the PrintPreviewDialog component
2. Set the Document property to the PrintDocument object
3. Configure the desired display settings for the
PrintPreviewDialog and the included PrintPreviewControl
4. Display the dialog by using the ShowDialog method

CodeExample

Introducción Una característica habitual de las aplicaciones es la capacidad de previsualizar


un documento a imprimir. En las aplicaciones Windows Forms, esta
funcionalidad se proporciona mediante el control PrintPreviewDialog.
PrintPreviewDialog contiene PrintPreviewControl así como también
controles para imprimir, realizar zoom, visualizar una o varias páginas y cerrar
el cuadro de diálogo. El cuadro de diálogo estándar PrintPreviewDialog
proporciona al usuario una herramienta familiar para previsualizar documentos,
pero podemos desarrollar nuestro formulario de vista previa personalizado
utilizando el mismo control PrintPreviewControl utilizado por
PrintPreviewDialog cuando nuestra aplicación o nuestros usuarios necesiten
algo diferente.
Procedimiento Para utilizar PrintPreviewDialog y mostrar una vista previa de impresión de un
documento:
1. Añadir un control PrintPreviewDialog a nuestro proyecto utilizando el
Cuadro de herramientas, o crear un PrintPreviewDialog en tiempo de
ejecución utilizando código como el siguiente:
Dim previewDialog As PrintPreviewDialog
previewDialog = New PrintPreviewDialog()

2. Establecer la propiedad Document del control PrintPreviewDialog al


componente PrintDocument.
Una vez hayamos creado un objeto PrintPreviewDialog, debemos
establecer su propiedad Document al objeto PrintDocument de nuestro
documento de impresión. Podemos establecer la propiedad Document en la
ventana Propiedades del control PrintPreviewDialog en tiempo de diseño o
con el siguiente código en tiempo de ejecución:
previewDialog.Document = PrintDocument1
14 Informes e impresión en aplicaciones Windows Forms

3. Podemos utilizar las propiedades de PrintPreviewDialog y del


PrintPreviewControl incluido para establecer las opciones de visualización
mostrando el cuadro de diálogo:
previewDialog.WindowState = FormWindowState.Maximized
previewDialog.PrintPreviewControl.StartPage = 0
previewDialog.PrintPreviewControl.Zoom = 1.0

4. Mostrar PrintPreviewDialog utilizando el método ShowDialog.


Como otros cuadros de diálogo, podemos utilizar el método ShowDialog
para visualizar el cuadro de diálogo PrintPreview en tiempo de ejecución:
previewDialog.ShowDialog()

Ejemplo El siguiente código muestra un ejemplo de cómo utilizar el control


PrintPreviewDialog para mostrar una vista previa de un documento. El
ejemplo asume que un control PrintPreviewDialog y un control
PrintDocument han sido añadidos a un formulario y que se invoca la subrutina
PrintPreview desde un procesador de eventos.
Private Sub PrintPreview()
' ensure that the first page of the print document is shown
PrintPreviewDialog1.PrintPreviewControl.StartPage = 0

' display the document two pages at a time


PrintPreviewDialog1.PrintPreviewControl.Columns = 2

' maximize the size of the dialog box on the display screen
PrintPreviewDialog1.WindowState = FormWindowState.Maximized

' display the contents of the appropriate print document


PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog

End Sub

PrintPreviewControl PrintPreviewControl se proporciona en el Cuadro de herramientas como un


control separado que podemos utilizar para previsualizar un documento de
impresión. Podemos utilizar el control PrintPreviewControl cuando deseemos
definir la interfaz de usuario de nuestra vista previa. No tiene botones ni demás
elementos de interfaz de usuario.
Algunas de las propiedades del control PrintPreviewControl incluyen Zoom,
Columns, Rows y StartPage. Estas propiedades están disponibles si estamos
utilizando PrintPreviewControl separadamente o como parte de
PrintPreviewDialog.
PrintPreviewControl.Columns = 2
PrintPreviewDialog.PrintPreviewControl.Columns = 2

Para más información sobre PrintPreviewControl, en la ayuda de Visual


Studio .NET, buscar utilizando la frase PrintPreviewControl.
Informes e impresión en aplicaciones Windows Forms 15

Práctica: utilizar el control PrintPreviewDialog

In this practice, you will


z Add a PrintPreviewDialog control
z Create a PrintPreview subroutine
z Modify the display settings for the
PrintPreviewDialog dialog box

Begin reviewing the objectives for


this practice activity 8 min

Introducción En esta práctica, añadiremos un control PrintPreviewDialog y lógica de


programación a un proyecto de modo que los usuarios de la aplicación puedan
previsualizar un documento antes de imprimirlo.
Instrucciones
Ë Abrir el proyecto de la práctica
1. Utilizar el Explorador de Windows para acceder a la carpeta pract02\Starter
que se puede encontrar dentro del fichero practs13.zip.
2. Hacer doble clic en el archivo de solución PrintPreviewDialog.sln para abrir
el proyecto.

Ë Añadir el control PrintPreviewDialog a nuestra aplicación


1. En el Explorador de soluciones, hacer clic en Form1.vb, y a continuación
en Ver diseñador.
2. En el Cuadro de herramientas, desplazarse hacia abajo hasta que aparezca el
control PrintPreviewDialog, y a continuación hacer doble clic en
PrintPreviewDialog.
3. ¿Dónde aparece PrintPreviewDialog en la ventana Vista de Diseño?
El control PrintPreviewDialog se añade a la bandeja de componentes en
la parte inferior de la ventana Vista de Diseño.
____________________________________________________________

____________________________________________________________
16 Informes e impresión en aplicaciones Windows Forms

Ë Crear una subrutina PrintPreview que muestre el documento de


impresión
1. En el Explorador de soluciones, hacer clic en Form1.vb, y a continuación
en Ver código.
2. En el menú Ver, posicionarse sobre Mostrar tareas, y a continuación en
Comentario.
3. En la Lista de tareas, hacer doble clic en TODO: create PrintPreview
subroutine.
4. Añadir la siguiente sentencia de código bajo la línea TODO y presionar
ENTER.
Private Sub PrintPreview

5. Añadir las sentencias de código siguientes a la subrutina PrintPreview.


PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()

6. Ejecutar la aplicación PrintPreviewDialog y utilizar el menú o el botón para


visualizar el documento de impresión.
7. ¿Hay algún modo de hacer el cuadro de diálogo más largo por defecto?
Sí. La propiedad WindowState del cuadro de diálogo puede utilizarse
para establecer el estado de la ventana por defecto a Maximized.
____________________________________________________________

____________________________________________________________

8. Cerrar la aplicación PrintPreviewDialog.

Ë Modificar las opciones de visualización parar el cuadro de diálogo


PrintPreviewDialog
1. Añadir la siguiente línea de código en la parte superior de la subrutina
PrintPreview.
PrintPreviewDialog1.WindowState = FormWindowState.Maximized

2. Ejecutar la aplicación PrintPreviewDialog y utilizar el menú o el botón para


mostrar el documento de impresión.
3. Modificar el número de página visualizado a página 4, y a continuación
cerrar el cuadro de diálogo.
4. Abrir de nuevo PrintPreviewDialog. Observar que la página de inicio es la
página que se ha mostrado cuando se cerró el cuadro de diálogo.
5. Hacer clic en Close, cerrar la aplicación y a continuación añadir las
siguientes líneas de código en la parte superior de la subrutina
PrintPreview.
PrintPreviewDialog1.PrintPreviewControl.StartPage = 0
PrintPreviewDialog1.PrintPreviewControl.Zoom = 1.0

6. Ejecutar la aplicación PrintPreviewDialog, y utilizar el menú o el botón para


visualizar el documento de impresión. Verificar que Print Preview Dialog
siempre muestra la página 1 al 100% al abrirse.
Informes e impresión en aplicaciones Windows Forms 17

7. Opcional: abrir PrintPreviewDialog, cambiar la página que se está


visualizando a página 2, y a continuación cerrar y abrir de nuevo el cuadro
de diálogo de vista previa para verificar que la página inicial mostrada es
siempre la página 1.
8. Cerrar el cuadro de diálogo, y a continuación cerrar la aplicación.
Si el tiempo lo permite
Ë Examinar algunos métodos adicionales para mostrar un documento de
impresión
1. En la vista Diseño, activar los otros dos botones de Form1.
2. Iniciar la aplicación y utilizar cada botón para visualizar el documento de
impresión.
3. Cerrar la aplicación y examinar el código utilizado para visualizar el
documento.
4. ¿Cuando querríamos utilizar PrintPreviewControl en lugar de
PrintPreviewDialog para visualizar un documento de impresión?
Deberíamos utilizar un PrintPreviewControl para visualizar un
documento cuando necesitemos personalizar las capacidades de vista
previa de impresión de una aplicación.
____________________________________________________________

____________________________________________________________

5. Cerrar la solución.
18 Informes e impresión en aplicaciones Windows Forms

Cómo utilizar el control PageSetupDialog


PageSetupDialog

„ Use PageSetupDialog to set page details in Windows


Forms applications
z Border and margin adjustments
z Headers and footers
z Portrait vs. landscape

„ To use PageSetupDialog to specify page settings


1. Create an instance of the PageSetupDialog control
2. Use ShowDialog to display the dialog at run time
3. Specify document settings by using the
DefaultPageSettings property or PageSettings class
CodeExample

Introducción El control PageSetupDialog es un cuadro de diálogo preconfigurado que


podemos utilizar para establecer los detalles de presentación de página para la
impresión en aplicaciones Windows Forms. El control PageSetupDialog
proporciona una solución fácil para especificar las opciones de página en vez de
configurar nuestro propio cuadro de diálogo. Con PageSetupDialog, podemos
hacer que los usuarios establezcan los ajustes de bordes y márgenes,
encabezados y pies y la orientación vertical u horizontal utilizando una
herramienta familiar.
Procedimiento: utilizar Para utilizar PageSetupDialog y especificar las opciones de página:
PageSetupDialog
1. Crear una instancia de PageSetupDialog.
El primer paso al usar PageSetupDialog en una aplicación Windows Forms
es añadir un control PageSetupDialog a nuestro formulario desde el Cuadro
de herramientas o crear una nueva instancia del control PageSetupDialog
mediante código como se muestra a continuación:
Dim pageDlg As New PageSetupDialog()
2. Proporcionar PageSetupDialog con un objeto PageSettings que puede ser
utilizado para almacenar las opciones de página y utilizado tanto para el
objeto PrintDocument como para PageSetupDialog.
… pageDlg.PageSettings = MyPageSettings
3. Utilizar el método ShowDialog para visualizar el cuadro de diálogo en
tiempo de ejecución.
Para visualizar el cuadro de diálogo en tiempo de ejecución, utilice el
método ShowDialog como se muestra en el código siguiente:
pageDlg.ShowDialog
4. Aplicar las opciones de página modificadas a nuestro objeto
PrintDocument.
Para aplicar las nuevas opciones de página a nuestro documento, utilizar la
propiedad DefaultPageSettings del objeto PrintDocument.
PrintDocument1.DefaultPageSettings = myPageSettings
Informes e impresión en aplicaciones Windows Forms 19

Ejemplo El código siguiente muestra un ejemplo de cómo utilizar el control


PageSetupDialog:
Private Sub PageSetup()

Try
Dim pageDialog As New PageSetupDialog()

If (storedPageSettings Is Nothing) Then


storedPageSettings = new PageSettings()
End If

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

Establecer las propiedades AllowPrinter, AllowOrientation, and AllowPaper


a True y permitir que los usuarios especifiquen estas propiedades.
PageSetupDialog1.AllowOrientation = False
PageSetupDialog1.AllowPaper = False
PageSetupDialog1.AllowPrinter = False
20 Informes e impresión en aplicaciones Windows Forms

Práctica: utilizar el control PageSetupDialog

In this practice, you will


z Add a PageSetupDialog control to your
application
z Create a PageSetup subroutine that
displays page settings
z Assign the page settings to the
PrintDocument object

Begin reviewing the objectives for


this practice activity 8 min

Introducción En esta práctica, añadiremos un control PageSetupDialog y lógica de programa


a un proyecto de modo que los usuarios de la aplicación puedan especificar las
opciones de página antes de imprimir un documento.
Instrucciones
Ë Abrir el proyecto de la práctica
1. Utilizar el Explorador de Windows para buscar la carpeta pract03\Starter
que se puede encontrar dentro del fichero practs13.zip.
2. Hacer doble clic en la solución PageSetupDialog.sln y abrir el proyecto.

Ë Añadir el control PageSetupDialog a nuestra aplicación


1. En el Explorador de soluciones, hacer clic en Form1.vb y a continuación en
Ver diseñador.
2. En el Cuadro de herramientas, desplazarse hacia abajo hasta encontrar el
control PageSetupDialog, y a continuación hacer doble clic en
PageSetupDialog.
3. ¿Dónde aparecerá el control PageSetupDialog en la ventana Vista de
diseño?
El control PageSetupDialog se añade a la bandeja de componentes en la
parte inferior de la ventana Vista de diseño.
____________________________________________________________

____________________________________________________________
Informes e impresión en aplicaciones Windows Forms 21

Ë Crear una subrutina PageSetup que visualice las opciones de página


1. En el menú Ver, posicionarse sobre Mostrar tareas, y a continuación hacer
clic en Comentario.
2. En la Lista de tareas, hacer doble clic en TODO: create PageSetup
subroutine.
3. Añadir la siguiente sentencia de código por debajo de la línea TODO y a
continuación presionar ENTER.
Private Sub PageSetup

4. Añadir la siguiente sentencia de código a la subrutina PageSetup.


PageSetupDialog1.ShowDialog()

5. Ejecutar la aplicación PageSetupDialog y utilizar el menú o el botón para


visualizar el cuadro de diálogo Page Setup. ¿Por qué se produce un error?
El control PageSetupDialog requiere que proporcionemos un objeto
PageSettings que represente las opciones de página para el documento.
____________________________________________________________

____________________________________________________________

6. Cerrar la aplicación y a continuación añadir las siguientes líneas de código


en la parte superior de la subrutina PageSetup.
myPageSettings = New PageSettings
PageSetupDialog1.PageSettings = myPageSettings

7. Ejecutar la aplicación PageSetupDialog y mostrar el cuadro de diálogo Page


Setup.
8. Cambiar los márgenes Superior e Izquierda a 0,5 pulgadas y a continuación,
hacer clic en OK.
9. Mostrar una vista previa del documento de impresión. ¿Por qué las nuevas
opciones no tienen efecto?
Aunque PageSetupDialog ubica las nuevas opciones en el objeto
MyPageSettings, todavía tenemos que asignar las opciones de página al
objeto PrintDocument.
____________________________________________________________

____________________________________________________________

____________________________________________________________

10. Cerrar PrintPreviewDialog y la aplicación.


22 Informes e impresión en aplicaciones Windows Forms

Ë Asignar las opciones de página al objeto PrintDocument


1. Añadir las siguientes líneas de código en la parte inferior de la subrutina
PageSetup.
If Not myPageSettings Is Nothing Then
PrintDocument1.DefaultPageSettings = myPageSettings
End If

2. Ejecutar la aplicación PageSetupDialog y utilizar el menú o el botón para


mostrar el cuadro de diálogo PageSetup.
3. Cambiar los márgenes Superior e Izquierdo a 0,5 pulgadas y a continuación
mostrarla vista previa del documento de impresión.
4. Abrir de nuevo el cuadro de diálogo PageSetup. Observar que las opciones
de página se han perdido.
5. Cerrar la aplicación y, a continuación, en la subrutina PageSetup remplazar
la línea de código “myPageSettings = New PageSettings()” con las
siguientes líneas de código:
If myPageSettings Is Nothing Then
myPageSettings = New PageSettings()
End If

6. Ejecutar la aplicación PageSetupDialog y utilizar el cuadro de diálogo


PageSetup para modificar las opciones de página del documento un par de
veces.
7. Cerrar la aplicación.

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

Cómo utilizar el control PrintDialog

PrintDialog

„ Use PrintDialog to specify printer-related settings


z Specify printer and print job properties
z Specify print range and collate settings

„ To use a PrintDialog control for users to select a printer


1. Create an instance of the PrintDialog component
2. Set the Document property to the PrintDocument object
3. Capture user input by using the DialogResult property
and display the Print dialog box
CodeExample

Introducción A menudo, los usuarios necesitan seleccionar una impresora o establecer


propiedades de impresión antes de un trabajo de impresión particular. Esto
puede realizarse utilizando el control PrintDialog.
Procedimiento Para utilizar el control PrintDialog e imprimir un documento:
1. Añadir un control PrintDialog a nuestro proyecto utilizando el Cuadro de
herramientas o crear una instancia del control PrintDialog en tiempo de
ejecución del siguiente modo:
Dim printDialog As New PrintDialog()

2. Establecer la propiedad Document del objeto PrintDialog al componente


PrintDocument.
Debemos establecer la propiedad Document del control PrintDialog al
objeto PrintDocument para el documento que estamos imprimiendo.
Establecer la propiedad Document del control PrintDialog en tiempo de
diseño en la ventana Propiedades o en tiempo de ejecución utilizando el
código del siguiente modo:
printDialog.Document = PrintDocument1

3. Capturar la respuesta del usuario al PrintDialog utilizando un objeto


DialogResult cuando construyamos la sentencia de código que muestra el
cuadro de diálogo.

Dim userResponse As DialogResult = printDialog.ShowDialog
24 Informes e impresión en aplicaciones Windows Forms

Ejemplo El siguiente código utiliza el control PrintDialog para proporcionar al usuario


una oportunidad de modificar las opciones de impresora y del trabajo de
impresión antes de imprimir el documento.
Private Sub PrintDoc()
Dim userResponse As DialogResult

PrintDialog1.Document = PrintDocument1

userResponse = PrintDialog1.ShowDialog()

If (userResponse = DialogResult.OK) Then


PrintDocument1.Print()

End If

End Sub
Informes e impresión en aplicaciones Windows Forms 25

Práctica: utilizar el control PrintDialog

In this practice, you will


z Add a PrintDialog control to your
application
z Create a PrintDoc subroutine that
displays the print dialog
z Print a document by using the
PrintDocument.Print method

Begin reviewing the objectives for


this practice activity 8 min

Introducción En esta práctica, añadiremos un control PrintDialog y la lógica de


programación de modo que los usuarios de la aplicación puedan especificar la
impresora y las opciones de impresión antes de imprimir un documento.
Instrucciones
Ë Abrir el proyecto de práctica
1. Utilice el Explorador de Windows para buscar la carpeta pract04\Starter que
se puede encontrar dentro del fichero practs13.zip.
2. Hacer doble clic en el archivo de solución PrintDialog.sln para abrir el
proyecto.

Ë Añadir el control PrintDialog a nuestra aplicación


1. En el Explorador de soluciones, hacer clic en Form1.vb, y a continuación
en el icono Ver diseñador.
2. En el Cuadro de herramientas, desplazarse hacia abajo hasta que aparezca el
control PrintDialog, y a continuación hacer doble clic en PrintDialog.
3. ¿Dónde aparece el control PrintDialog en la ventana Vista de diseño?
El control PrintDialog se añade a la bandeja de componentes en la
parte inferior de la ventana de Vista de diseño.
____________________________________________________________

____________________________________________________________
26 Informes e impresión en aplicaciones Windows Forms

Ë Crear una subrutina PrintDoc que visualice el cuadro de diálogo de


impresión
1. Abrir Form1 en el Editor de código
2. En el menú Ver, posicionarse sobre Mostrar tareas, y a continuación hacer
clic en Comentario.
3. En la Lista de tareas, hacer doble clic en TODO: create PrintDoc
subroutine.
4. Añadir la siguiente instrucción de código por debajo de la línea TODO y
presionar ENTER.
Private Sub PrintDoc

5. Añadir la siguiente instrucción de código a la subrutina PrintDoc.


PrintDialog1.ShowDialog()

6. Ejecutar la aplicación PrintDialog, y hacer clic en el elemento de menú o en


el botón que se utiliza para visualizar el cuadro de diálogo de impresión,
¿Por qué el cuadro de diálogo no se abre correctamente?
La propiedad PrintDialog.Document debe ser establecida antes de que
PrintDialog pueda ser visualizada.
____________________________________________________________

____________________________________________________________

7. Hacer clic en OK, cerrar la aplicación, y a continuación añadir la siguiente


línea de código en la parte superior de la subrutina PrintDoc:
PrintDialog1.Document = PrintDocument1

Ë Imprimir un documento utilizando el método PrintDocument.Print


1. Ejecutar la aplicación y a continuación visualizar el cuadro de diálogo
Print.
2. Hacer clic en OK.
3. ¿Por qué no se imprime el documento?
PrintDialog no invoca al método PrintDocument.Print; debemos añadir
código para hacerlo. Sin embargo, esto significa que debemos conocer
qué botón pulsó el usuario en el cuadro de diálogo. Podemos
determinarlo utilizando un objeto DialogResult.
____________________________________________________________

____________________________________________________________

____________________________________________________________

____________________________________________________________

Nota Para más información sobre el objeto DialogResult, acceder a la


documentación de ayuda de Visual Studio .NET.
Informes e impresión en aplicaciones Windows Forms 27

4. Cerrar la aplicación y a continuación remplazar la línea de código


“PrintDialog1.ShowDialog()” en la subrutina PrintDoc con las líneas de
código siguientes:
Dim userResponse As DialogResult = PrintDialog1.ShowDialog
If userResponse = DialogResult.OK Then
PrintDocument1.Print()
End If

5. Ejecutar la aplicación PrintDialog y visualizar el cuadro de diálogo de


impresión.
6. Hacer clic en OK, y a continuación dentro del cuadro Output File Name,
teclear C:\Text
7. Hacer clic en OK.
Observar que se abre automáticamente un cuadro de diálogo Imprimiendo,
proporcionando al usuario la oportunidad de cancelar el trabajo de
impresión.
8. Cerrar la aplicación y cerrar Visual Studio .NET.
28 Informes e impresión en aplicaciones Windows Forms

Lección: creación del contenido del documento de


impresión utilizando GDI+
„ What Is GDI+?
„ What Is the Graphics Object?
„ How to Create and Use Pens, Brushes, and
Fonts
„ How to Draw and Measure Text in the PrintPage
Event Procedure
„ How to Generate Print Content by Using
StreamReader
„ Demonstration: Constructing Print Document
Content by Using GDI+
„ Practice: Constructing Print Document Content
by Using GDI+

Introducción En aplicaciones Windows Forms, utilizamos GDI+ y el evento PrintPage del


objeto PrintDocument para construir los contenidos de un documento de
impresión. Esta lección presenta GDI+ y cubre cómo utilizar métodos de GDI+
para pintar el contenido de texto y gráficos de un documento de impresión
desde una aplicación Windows Forms de .NET.
Objetivos de la lección Después de completar esta lección, seremos capaces de:
„ Identificar los componentes de GDI+ y utilizar GDI+ en nuestras
aplicaciones.
„ Utilizar un objeto Graphics como contenedor para crear los contenidos de
un documento de impresión.
„ Crear y utilizar los lápices, pinceles y fuentes requeridos para dibujar
objetos de texto y gráficos.
„ Utilizar los métodos de dibujo de un objeto Graphics para dibujar texto y
gráficos vectoriales bidimensionales (2-D).
„ Generar contenido de impresión utilizando StreamReader.
Informes e impresión en aplicaciones Windows Forms 29

¿Qué es GDI+?

„ GDI+ (the new graphics device interface)


z Enables applications to generate graphics and
formatted text for the video display and the printer
z Allows application developers to create device-
independent applications
„ Three parts of GDI+
z 2-D vector graphics
z Text
z Images

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

¿Qué es el objeto Graphics?


„ Graphics Object:
z Provides the drawing surface on which content is placed
z Provides methods for drawing text and graphics at specified
locations
z Provides various tools for modifying its contents
Dim
Dim myGraphic
myGraphic as
as Graphics
Graphics

'' 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

Clear Limpia la superficie de dibujo completa y la rellena con


el color de fondo especificado.
DrawLine Dibuja una línea que conecta los dos puntos
especificados por pares de coordenadas.

DrawRectangle Dibuja un rectángulo especificado por un par de


coordenadas, una anchura y una altura.
DrawString Dibuja la cadena de texto especificada en la ubicación
especificada con los objetos Brush y Font.
FillRectangle Rellena el interior de un rectángulo.
MeasureString Mide la cadena especificada cuando se dibuja con la
fuente especificada y formateada con el formato
especificado.
Informes e impresión en aplicaciones Windows Forms 31

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

' draw lines or outlined shapes using a Pen


myGraphic.DrawLine(myPen,X1,Y1,X2,Y2)
myGraphic.DrawRectangle(myPen, X1, Y1, X2, Y2)

' draw filled shapes using a Brush


myGraphic.FillRectangle(myBrush,X1,Y1,X2,Y2)

' draw text using a Font and a Brush


myGraphic.DrawString(myText, myFont, myBrush, X1, Y1)

' measure text width on the Graphics object using a Font


textWidth = myGraphic.MeasureString(myText, myFont).Width
32 Informes e impresión en aplicaciones Windows Forms

Cómo crear y utilizar lápices, pinceles y fuentes

Pens A pen is required to draw lines and outlined shapes


Dim
Dim myPen
myPen As
As New
New Pen(Color.Blue)
Pen(Color.Blue)

Brushes A brush is required to draw filled shapes or draw text


Dim
Dim myBrush
myBrush As
As New
New SolidBrush(Color.Blue)
SolidBrush(Color.Blue)

Fonts A font is required to draw text of a single size or style


Dim
Dim myFont
myFont As
As Font("Arial",
Font("Arial", 16,
16, FontStyle.Bold)
FontStyle.Bold)

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

2. Aplicar propiedades de anchura y estilo.


La propiedad Width de un Pen es de tipo Integer u tiene un valor por
defecto de 1 (las unidades las establece el objeto Graphics). La propiedad
DashStyle es también de tipo Integer, pero nuestro código será más fácil de
leer si utilizamos la enumeración DashStyle proporcionada por el espacio
de nombres Drawing2D. Aunque la propiedad Width puede establecerse
cuando instanciamos un nuevo Pen, el estilo de línea debe ser aplicado una
vez que se ha creado Pen. Los siguientes ejemplos de código demuestran la
creación de lápices con diferentes propiedades de anchura y estilos. Los
valores por defecto para Width es 1 y para Style es Solid.
Dim myWideRedPen as Pen = New Pen(Color.Red, 4)
Dim myDashedPen As New Pen(Color.Black)
myDashedPen.DashStyle = Drawing2D.DashStyle.Dash
myDashedPen.DashCap = Drawing2D.DashCap.Round
Informes e impresión en aplicaciones Windows Forms 33

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

Cómo dibujar y medir el texto en el procedimiento de evento


PrintPage

„ 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

Introducción GDI+ nos permite dibujar y medir texto.


Podemos dibujar texto utilizando el método DrawString del objeto Graphics.
Para dibujar texto, debemos tener un objeto Brush y un objeto Font.
Si necesitamos determinar la anchura o altura del texto tal y como será dibujado
en un documento de impresión u otro objeto Graphics, podemos utilizar el
método MeasureString del objeto Graphics. Por ejemplo, debemos conocer la
anchura y longitud de una cadena tal y como aparece en la página para centrar
la cadena en una región de la página. MeasureString puede también utilizarse
para determinar cuántas líneas de texto cabrán en una página, si una línea de
texto cabrá entre los márgenes o alinear texto a la derecha.
Procedimiento: dibujar Para construir texto para nuestro documento de impresión en el procedimiento
texto de evento PrintPage:
1. Calcular la ubicación en la página dónde se ubicará el texto.
2. Seleccionar Font y Brush que queremos utilizar para este texto.
Podemos utilizar Fonts y Brushes que ya tengamos creados como crear
nuevos. Para más información sobre crear Fonts y Brushes, ver el tópico
Cómo crear y utilizar lápices, pinceles y fuentes en esta lección..
3. Invocar el método DrawString.
Para construir el texto, invocar el método DrawString del objeto Graphics.
e.Graphics.DrawString(myText, myFont, myBrush, X1, Y1)
Informes e impresión en aplicaciones Windows Forms 35

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

Otra opción para obtener la altura de nuestro texto es utilizar el método


GetHeight para Font y pasarle el objeto Graphics del siguiente modo:
textHeight = myFont.GetHeight(e.Graphics)
36 Informes e impresión en aplicaciones Windows Forms

Cómo generar contenido de impresión utilizando StreamReader


Use StreamReader to read lines of information from a
standard text file
Private
Private Sub
Sub btnPrintPreviewControl_Click(ByVal
btnPrintPreviewControl_Click(ByVal
sender
sender As
As System.Object,
System.Object, ByVal
ByVal ee As
As __
System.EventArgs)
System.EventArgs) Handles
Handles __
btnPrintPreviewControl.Click
btnPrintPreviewControl.Click
Try
Try
StreamToPrint
StreamToPrint == New
New
StreamReader(“PrintMe.Txt”)
StreamReader(“PrintMe.Txt”)
Try
Try
PrintPreviewControl()
PrintPreviewControl()

Finally
Finally
StreamToPrint.Close()
StreamToPrint.Close()

End
End Try
Try

Introducción Además de utilizar GDI+ para generar contenido de impresión, podemos


también utilizar StreamReader como un proveedor de entrada. Podemos utilizar
StreamReader para leer líneas de información desde un archivo de texto
estándar.
Ejemplo El siguiente ejemplo demuestra cómo utilizar StreamReader con
PrintPreviewControl. Cuando se hace clic en el botón Print Preview, el flujo
de texto se lee desde el archivo PrintMe.txt.
Private Sub btnPrintPreviewControl_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles _
btnPrintPreviewControl.Click
Try
streamToPrint = New StreamReader("PrintMe.Txt")
Try
PrintPreview()
Finally
streamToPrint.Close()
End Try
Catch Ex As Exception
MessageBox.Show(Ex.Message)
End Try
Informes e impresión en aplicaciones Windows Forms 37

El siguiente código muestra que si no se lee ningún texto desde el


StreamReader, la impresión finaliza o verifica si hay más páginas a imprimir.
' inside the PrintPage event handler
While currentLine < linesPerPage
' read a line of text from the StreamReader object
textLine = streamToPrint.ReadLine()

If textLine Is Nothing Then Exit While

' position text, draw text, increment currentLine

End While

'If more lines exist in the file, print another page.


If Not (textLine Is Nothing) Then
e.HasMorePages = True

Else
e.HasMorePages = False

End If
38 Informes e impresión en aplicaciones Windows Forms

Demostración: creación del contenido del documento de impresión


utilizando GDI+

In this demonstration, you see how to construct


print document content by using GDI+

Introducción En esta demostración, veremos cómo crear contenido de documentos de


impresión utilizando GDI+.
Instrucciones
Ë Abrir los proyectos
1. Iniciar dos instancias de Visual Studio .NET.
2. Abrir el archivo de solución PurchaseOrderApplication en una instancia de
Visual Studio .NET y el archivo de solución PrintingForm2565Class en la
otra. Los archivos de solución pueden encontrarse bajo
carpeta_instalación\Sampapps, en las carletas denominadas
OrderApplication y PrintingForm2565Class.

Ë Examinar y modificar código en el proyecto PrintingForm2565Class


1. Abrir PrintingForm2565Class.vb en el Editor de código.
2. Mencionar que esta clase hereda de la clase PrintDocument.
3. Describir las subrutinas que se utilizan para: definir las regiones del
formulario, dibujar el texto y los objetos vectoriales 2-D que forman el
formulario en blanco, recibir contenido de texto desde la aplicación host y
rellenar el contenido en el formulario.
4. Desplazarse hacia abajo hasta la subrutina PrintingEmptyForm2565, y
mostrar el código utilizado para crear las fuentes y los pinceles.
5. Desplazarse hacia abajo y mostrar algunas de las instrucciones de código
GDI+ que dibujan las líneas y formas rellenas.
6. Desplazarse más hacia abajo y mostrar el proceso requerido para centrar las
etiquetas de elementos de compra en la fila de encabezado de la tabla de
elementos de compra.
7. Desplazarse de nuevo hacia la parte superior de esta subrutina y modificar
alguna de las propiedades del lápiz y de los pinceles. Regenerar la clase.
Informes e impresión en aplicaciones Windows Forms 39

Ë Examinar y ejecutar el proyecto PurchaseOrderApplication


1. Abrir MainForm.vb en el Editor de código.
2. Describir las subrutinas que se utilizan para: leer contenido desde el
formulario, pasar contenido del formulario a la clase de impresión,
previsualizar el documento de impresión, modificar opciones de página e
imprimir el documento.
3. En el Explorador de soluciones, eliminar la referencia a
PrintingForm2565Class desde el proyecto PurchaseOrderApplication, y
a continuación añadir una referencia a la clase recientemente creada
navegando hasta la carpeta bin de la carpeta PrintingForm2565Class y
abriendo el archivo PrintingFomr2565Class.dll.
4. Regenerar la solución PurchaseOrderApplication, y a continuación ejecutar
la aplicación.
5. Abrir el cuadro de diálogo Print Preview para mostrar nuestras
modificaciones.
40 Informes e impresión en aplicaciones Windows Forms

Práctica: creación del contenido del documento de impresión


utilizando GDI+

In this practice, you will


z Create pens, brushes, and fonts
z Create 2-D vector objects
z Measure and position text on the page

Begin reviewing the objectives


15 min
for this practice activity

Introducción En esta práctica, crearemos contenido de documentos de impresión utilizando


vectores 2-D y texto en GDI+.
Instrucciones
Ë Abrir el proyecto de la práctica
1. Utilizar el Explorador de Windows para buscar la carpeta pract05\Starter
que se puede encontrar dentro del fichero practs13.zip.
2. Hacer doble clic sobre el archivo de solución PrintPageCode.sln para abrir
el proyecto.

Ë Crear lápices, pinceles y fuentes


1. Abrir Form1 en el Editor de código.
2. En el menú Ver, posicionarse sobre Mostrar tareas, y a continuación hacer
clic en Comentario.
3. En la Lista de tareas, hacer doble clic en TODO: create pens.
4. Añadir las siguientes instrucciones de código por debajo de la línea TODO.
Dim penWideRed As Pen = New Pen(Color.Red, 10)
Dim penDashedBlack As Pen = New Pen(Color.Black, 6)
penDashedBlack.DashStyle = DashStyle.Dash
penDashedBlack.DashCap = DashCap.Round

5. En la Lista de tareas, hacer doble clic en TODO: create brushes.


6. Añadir las siguientes instrucciones de código por debajo de la línea TODO.
Dim brushBlue As Brush = New SolidBrush(Color.Blue)
Dim brushBlack As Brush = Brushes.Black

7. En la Lista de tareas, hacer doble clic en TODO: create fonts.


Informes e impresión en aplicaciones Windows Forms 41

8. Añadir las siguientes instrucciones de código por debajo de la línea TODO.


Dim fontMedium As Font = New Font("Arial", 14)
Dim fontLargeBold As Font
fontLargeBold = New Font("Arial", 36, FontStyle.Bold)

9. ¿Alguna de las instrucciones de código que hemos introducido requieren


una referencia al espacio de nombres Drawing2D?
Sí. Las instrucciones de código utilizadas para establecer DashStyle y
DashCap utilizan enumeraciones proporcionadas por el espacio de
nombres Drawing2D.
____________________________________________________________

____________________________________________________________

Ë Crear objetos vectoriales 2-D


1. En la Lista de tareas, hacer doble clic en TODO: draw outline shapes.
2. Añadir las siguientes instrucciones de código por debajo de la línea TODO.
e.Graphics.DrawLine(penWideRed, hPos1, yPos1, hPos2, yPos2)
e.Graphics.DrawRectangle(penDashedBlack, _
hPos1, _
vPos1, _
rectWidth, _
rectHeight)
3. En la Lista de tareas, hacer doble clic en TODO: draw filled shapes.
4. Añadir las siguientes instrucciones de código por debajo de la línea TODO.
Dim fillRectangle As Rectangle
fillRectangle = New Rectangle( _
lgRectangle.Left, _
lgRectangle.Bottom, _
lgRectangle.Width, _
lgRectangle.Height)
e.Graphics.FillRectangle(brushBlue, fillRectangle)
Ë Measure and position text on the page
1. En la Lista de tareas, hacer doble clic en TODO: draw centered text.
2. Añadir las siguientes instrucciones de código por debajo de la línea TODO.
textWidth = e.Graphics.MeasureString(centeredText, _
fontMedium).Width
textHeight = fontMedium.GetHeight(e.Graphics)
hPos = rectText.Left + (rectText.Width – textWidth) / 2
vPos = rectText.Top + (rectText.Height – textHeight) / 2
e.Graphics.DrawRectangle(Pens.Black, rectText)
e.Graphics.DrawString(stringMyText, _
fontLargeBold, _
brushBlack, _
poshorizontal, _
posVertical)

3. Ejecutar nuestra aplicación, y hacer clic en Print Preview para visualizar la


salida GDI+.
42 Informes e impresión en aplicaciones Windows Forms

4. Cerrar el formulario de vista previa, hacer clic en Draw gradient text, y a


continuación hacer clic en Print Preview.
5. ¿Cómo dibujaríamos texto alineado a la derecha?
Podemos dibujar texto alineado a la derecha midiendo la cadena de
texto y estableciendo una posición horizontal igual a la posición de la
derecha que definimos menos la anchura de la cadena de texto.
____________________________________________________________

____________________________________________________________

____________________________________________________________

Si el tiempo lo permite, examinar el código utilizado para crear el texto


relleno de gradiente.
6. Guardar nuestra aplicación y cerrar Visual Studio .NET.
Informes e impresión en aplicaciones Windows Forms 43

Lección: crear informes utilizando Crystal Reports

„ 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

Introducción Crystal Reports es la herramienta de reporting estándar en Visual Studio .NET.


Nos permite crear un informe desde cero o utilizar alguno de los Asistentes de
informes. Antes de aprender cómo utilizar Crystal Reports para crear y
formatear informes, debemos entender los beneficios de utilizar Crystal
Reports.
Beneficios de utilizar Crystal Reports:
Crystal Reports
„ Nos permite escoger el lenguaje y proyecto.
Utilizar el lenguaje de programación que queramos y acceder a Crystal
Report Designer desde cualquier proyecto.
„ Proporciona visores de informes para aplicaciones Windows y Web.
Crystal Reports proporciona dos visores que podemos utilizar para
visualizar nuestro informe en nuestra aplicación: Web Forms Viewer para
aplicaciones Web y Windows Forms Viewer para aplicaciones basadas en
Windows.
„ Permite personalización en tiempo de ejecución de informes.
Crystal Reports permite al visor interactuar con otros controles en tiempo de
ejecución. Con la personalización en tiempo de ejecución, los usuarios
pueden visualizar diferentes informes o cambiar el formato, selección de
datos o las opciones de exportación de un informe existente.
„ Permite a los usuarios interactuar fácilmente con los informes.
Como Crystal Reports puede interactuar con otros controles, los usuarios
pueden filtrar información de los informes haciendo clic en un botón o
seleccionando desde un cuadro de selección.
„ Proporciona capacidades de visualización de datos y análisis.
Crystal Reports proporciona a los desarrolladores capacidades de
visualización de datos y análisis. Utiliza una arquitectura abierta y
extensible, con estándares como XML, para permitirnos compartir informes
e información a través de la Web. También ofrece características como
detalles en los gráficos, navegación y búsqueda de texto.
Informes e impresión en aplicaciones Windows Forms 45

Cómo crear y formatear un informe utilizando Crystal Reports

Open
Open the
the Choose
Report Choose a
a Choose a
Report template
template data source
Expert
Expert

Creating a Crystal Report by Select


Select the
the
Using the Report Expert required
required
fields
fields

Format Generate Group items


Format Generate
the and create
the report
report a
a report
report
formulas

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

Para obtener más información sobre cada una de las plantillas, en la


documentación de ayuda de Visual Studio .NET, buscar utilizando la frase
Crystal Reports Experts.
3. Seleccione una fuente de datos.
Seleccione la fuente de datos a la que referenciará nuestro informe.
Podemos utilizar más de una fuente de datos en un informe. Podemos
también seleccionar las tablas de la base de datos que queremos utilizar en
el informe. Crystal Reports automáticamente enlazará las tablas, o podemos
especificar cómo queremos las tablas enlazadas. Las tablas de bases de
datos se enlazan de modo que los registros de una base de datos se
corresponden con los registros relacionados de otra.
4. Seleccionar los campos requeridos.
Tras seleccionar la fuente de datos, seleccionar los campos que queremos
visualizar en el informe.
5. Agrupar elementos y crear fórmulas.
Cuando insertamos por primera vez un campo de base de datos en nuestro
informe, los datos en los campos aparecen en el orden en que se
introdujeron originalmente en la base de datos. Agrupar, ordenar y totalizar
ayudan a convertir datos desorganizados en información útil en un informe.
En la mayoría de casos, los datos que necesita un informe ya existen en los
campos de las tablas de la base de datos. A veces, necesitamos incorporar
información adicional en el informe que no existe en ninguno de los campos
de datos. En casos como este, debemos crear una fórmula. Hay cuatro
grupos de fórmulas diferentes en Crystal Reports: informe, formateo
condicional selección y búsqueda. La mayoría de las formulas en un
informe utilizan las fórmulas de informes y formateo condicional.
Para más información sobre cómo crear y utilizar estas fórmulas, en la
documentación de ayuda de Visual Studio .NET, buscar utilizando la frase
Formula Overview.
6. Generar el informe.
Una vez que hayamos añadido los campos requeridos y fórmulas al informe,
hacer clic en Finalizar para generar el informe.
7. Formatear el informe.
Una vez que el informe ha sido generado, podemos desear realizar cambios
a la presentación y al diseño del informe, así como a la apariencia del texto,
objetos o a todas las secciones del informe. Podemos utilizar varias
opciones de formateo para cambiar la presentación de nuestros informes.
• Para formatear un objeto, hacer clic con el botón derecho sobre el
objeto, y a continuación hacer clic en Format.
• Para formatear la sección de un informe, hacer clic con el botón derecho
en la sección del informe, y a continuación hacer clic en Dar formato a
sección.
Informes e impresión en aplicaciones Windows Forms 47

Cómo visualizar un informe utilizando Crystal Report Viewer


To View a Report by Using Crystal Report Viewer

Add the Crystal Report Viewer control to the form

Set ReportSource to the name of the report that is displayed

Use ShowZoomButton to zoom in and zoom out on the report

Use ShowPrintButton to print the report

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

Cómo añadir DataSets a un informe

„ Adding datasets to reports allows you to create


reports that are disconnected from the database
„ To add datasets to a report, add the code to the
Form_Load event
Private
Private rpt
rpt As
As New
New OrderHistory()
OrderHistory()
Private
Private dsReportInfo As
dsReportInfo As New
New DataSet()
DataSet()
dsReportInfo.ReadXml("NorthwindData.xml")
dsReportInfo.ReadXml("NorthwindData.xml")
rpt.SetDataSource(dsReportInfo)
rpt.SetDataSource(dsReportInfo)
CrystalReportViewer1.ReportSource
CrystalReportViewer1.ReportSource == rpt
rpt

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()

2. Generar una instancia en tiempo de diseño del dataset.


La instancia en tiempo de diseño del dataset expone los campos en el dataset
al Asistente de informes. El dataset en tiempo de diseño contiene
únicamente la descripción de los datos y no los datos actuales. Por tanto,
cuando trabajamos con un informe conectado a un objeto dataset, no
podemos buscar datos de campos en Crystal Report Designer en tiempo de
diseño.
Private dsReportInfo As New DataSet()

3. Poblar el dataset.
dsReportInfo.ReadXml("NorthwindData.xml")

4. Invocar el método SetDataSource del informe y pasar una instancia del


dataset poblado.
Rpt.SetDataSource(dsReportInfo)

5. Establecer la propiedad ReportSource de Crystal Report Viewer a la


instancia del informe.
CrystalReportViewer1.ReportSource = rpt
Informes e impresión en aplicaciones Windows Forms 49

Práctica: crear y visualizar informes Crystal Reports

In this practice, you will


z Configure the SqlConnection1 control on
Form1 to connect to the pubs database
z Create a Crystal Report
z Add a Crystal Report Viewer control to
Form1

Begin reviewing the objectives for 12 min


this practice activity

Introducción En esta práctica, podremos crear y visualizar informes Crystal Reports.


Instrucciones
Ë Abrir el proyecto de práctica
1. Utilizar el Explorador de Windows para buscar la carpeta pract06\Starter
que se puede encontrar dentro del fichero practs13.zip.
2. Hacer doble clic en el archivo de solución CrystalReport.sln para abrir el
proyecto.

Ë Configurar el control SQLConnection1 de Form1 para que se conecte a


la base de datos Pubs
1. Abrir Form1 en la vista de diseño.
2. Seleccionar SQLConnection1, y desde la ventana de Propiedades, hacer
clic en la propiedad ConnectionString, hacer clic sobre la flecha y a
continuación hacer clic en Nueva conexión.

Nota Utilizar la información de conexión existente para la base de datos


pubs si ya existe y saltar al siguiente procedimiento.

3. En el cuadro de diálogo Propiedades del enlace de datos, teclear


nombre_de_máquina\MOC en dónde nombre_de_máquina es el nombre de
su ordenador.
4. Seleccionar la opción Utilizar la seguridad integrada de Windows NT.
5. Seleccionar la base de datos pubs desde la lista desplegable, hacer clic en
Probar conexión para garantizar que podemos acceder a la base de datos
pubs, hacer clic en OK, y clic en OK de nuevo.

Ë Crear un informe Crystal Report


1. En el menú Archivo, hacer clic en Agregar nuevo elemento.
50 Informes e impresión en aplicaciones Windows Forms

2. En el cuadro de diálogo Agregar nuevo elemento, bajo Plantilla, hacer clic


en Crystal Report.
3. Establecer el nombre del informe a StoreSalesReport.rpt, y a continuación
hacer clic en Abrir.
4. Cerrar el cuadro de diálogo Asistente de Registro de Crystal Decisions.
5. En el cuadro de diálogo Galería de Crystal Report, hacer clic en Aceptar.
6. En la pestaña Datos, expandir Datos del proyecto, expandir ADO.NET
DataSets, y a continuación expandir CrystalReport.StoreSalesDataSet.
7. Hacer clic en Insertar tabla, y a continuación hacer clic en Siguiente.
8. En la pestaña Campos, en la lista Campos disponibles, hacer clic en
stor_id y a continuación hacer clic en Agregar.
9. Repetir el paso 8 para añadir todos los campos que están listados debajo de
la tabla stores en la lista Campos disponibles, y a continuación hacer clic
en Siguiente.
10. En la pestaña Grupo, en la lista Campos disponibles, debajo de Report
Fields, hacer clic en stores.stor_name, hacer clic en Agregar, y a
continuación hacer clic en Siguiente.
11. En la etiqueta Total, en la lista Campos resumen, hacer clic en stores.qty,
hacer clic en Eliminar, y a continuación hacer clic en la etiqueta Estilo.
12. Establecer el título a Store Sales, y a continuación hacer clic en Finalizar.

Ë Agregar un control Crystal Report Viewer a Form1


1. Abrir la vista de diseño de Form1.
2. En el Cuadro de herramientas, hacer doble clic en CrystalReportViewer.
3. Establecer la propiedad Dock de CrystalReportViewer de modo que el
control se muestre en el formulario completo.
4. Abrir Form1 en el Editor de código.
5. En el menú Ver, posicionarse sobre Mostrar tareas, y a continuación hacer
clic en Comentario.
6. En la Lista de tareas, hacer doble clic en TODO 1: create an instance of
StoreSalesReport.
7. Añadir la siguiente instrucción de código debajo de la línea TODO:
Private report As StoreSalesReport = New StoreSalesReport()

8. En la Lista de tareas, hacer doble clic en TODO 2: Call the SetDataSource


method of report and pass StoreSalesDataSet1.
9. Añadir la siguiente instrucción de código debajo de la línea TODO:
report.SetDataSource(StoreSalesDataSet1)
CrystalReportViewer1.ReportSource = report

10. Generar y ejecutar nuestra aplicación.


11. Utilizar el control CrystalReportViewer para examinar nuestro informe.
Observar las características proporcionadas en la barra de herramientas del
visualizador.
12. Guardar nuestro proyecto, y a continuación cerrar Visual Studio .NET.

You might also like