13. informes e impresiones

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

Upload: manuguzman

Post on 11-Jun-2015

2.592 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 13. Informes e Impresiones

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

Page 2: 13. Informes e Impresiones
Page 3: 13. Informes e Impresiones

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.

Page 4: 13. Informes e Impresiones

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.

Page 5: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 3

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

5. Print method• Sends content to printer

4. Standard dialog boxes for printing• PrintPreviewDialog• PageSetupDialog• PrintDialog

What About User Support?

What About User Support?

3. PrintPageEventArgs parameter• PageSettings property• Graphics object• HasMorePages property

2. PrintPage event• Construct content• Support multi-page docs

1. PrintDocument object• Enables printing

How?How?

Again, How?

Again, How?

But How Do I Actually Print?

But How Do I Actually Print?

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 impresión

1. Añadir el objeto PrintDocument. 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.

Page 6: 13. Informes e Impresiones

4 Informes e impresión en aplicaciones Windows Forms

Objeto PrintDocument

PrintDocument objectProvides the ability to print a documentProvides properties that describe what to print

Note: The check marks indicate the most commonly used properties, events, and methods of the PrintDocument object

PrintDocumentProperties

PrintDocumentPrintDocumentPropertiesProperties

DefaultPageSettingsDefaultPageSettings

DocumentNameDocumentName

PrintControllerPrintController

PrinterSettingsPrinterSettings

PrintDocumentEvents

PrintDocumentPrintDocumentEventsEvents

BeginPrintBeginPrint

EndPrintEndPrint

PrintPagePrintPage

QueryPageSettingsQueryPageSettings

PrintDocumentMethods

PrintDocumentPrintDocumentMethodsMethods

DisposeDispose

PrintPrint

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 PrintDocument

La propiedad DefaultPageSettings obtiene o establece las opciones de páginas 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.

Page 7: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 5

Eventos de PrintDocument

El evento PrintPage se utiliza para generar el contenido del documento de 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 PrintDocument

Una vez que hemos establecido la impresora y las opciones de página por 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.

Page 8: 13. Informes e Impresiones

6 Informes e impresión en aplicaciones Windows Forms

Evento PrintPage y PrintPageEventArgs

• The PrintPage event includes two parameters: an object representing the Sender and a PrintPageEventsArgs object

• The PrintPage event procedure contains the programming logic that constructs the contents of the print document and ensures that the entire print document is printed

•The PrintPageEventArgsobject provides the components required to construct the pages of the print document

•PageSettings, Graphics, and HasMorePages are the critical members

PrintPagesEventArgs ObjectPrintPagesEventArgs Object

PrintPage EventPrintPage Event

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 evento PrintPage

El procedimiento de evento que procesa el evento PrintDocument.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 PrintPageEventArgs

El parámetro PrintPageEventArgs contiene todos los datos requeridos para 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).

Page 9: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 7

PrintPageEventArgs. PageSettings

La propiedad PageSettings proporcionada por el parámetro 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.

Para modificar las opciones de página, debemos procesar el evento QueryPageSettings del objeto PrintDocument. Nota

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. Graphics

El objeto Graphics proporcionado por el parámetro PrintPageEventArgs actúa 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. HasMorePages

La propiedad HasMorePages proporcionada por el parámetro 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 …

Page 10: 13. Informes e Impresiones

8 Informes e impresión en aplicaciones Windows Forms

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

Print Page EventPrint Page EventPrint Page Event

• Use the class to read page settings such as margins and page height and width

• Establish fonts and brushes used in your output

• Establish regions on the page• Construct output by positioning

text and graphics by using the methods of the Graphics class

• Use the class to read page settings such as margins and page height and width

• Establish fonts and brushes used in your output

• Establish regions on the page• Construct output by positioning

text and graphics by using the methods of the Graphics class

PrintPagesEventArgs ClassPrintPagesEventArgs ClassPrintPagesEventArgs ClassPrintPageEventArgs

• Graphics Object• HasMorePages• PageSettings

PrintDocument ObjectPrintDocument ObjectPrintDocument Object

• Specify print settings• Add printing logic to PrintPage

Event• Call the Print method

• Specify print settings• Add printing logic to PrintPage

Event• Call the Print methodPrint MethodPrint MethodPrint Method

• Calls PrintPage• Checks HasMorePages• Calls PrintPage• Checks HasMorePages

DefaultPageSettingsDefaultPageSettings

DIALOGSDIALOGSDIALOGS

• Document property of the Dialogs set to the PrintDocument object

• Document property of the Dialogs set to the PrintDocument 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 impresión en una aplicación Windows Forms

Para imprimir un documento de texto desde una aplicación Windows Forms, seguiremos el procedimiento siguiente:

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.

Page 11: 13. Informes e Impresiones

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

Add a PrintDocument control to a project

Create a PrintPage event procedure and develop code to construct the contents of a print document

Set the value of the HasMorePagesproperty to indicate when more pages should be printed

Begin reviewing the objectives for this practice activity 10 min

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.

Page 12: 13. Informes e Impresiones

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. ____________________________________________________________

____________________________________________________________

____________________________________________________________

____________________________________________________________

Page 13: 13. Informes e Impresiones

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

Page 14: 13. Informes e Impresiones

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.

Page 15: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 13

Cómo utilizar el control PrintPreviewDialog

PrintPreviewDialogPrintPreviewDialog

Use PrintPreviewDialog to display how a document will appear when printedTo display a print preview of a document1.Create an instance of the PrintPreviewDialog component2.Set the Document property to the PrintDocument object3.Configure the desired display settings for the

PrintPreviewDialog and the included PrintPreviewControl4.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

Page 16: 13. Informes e Impresiones

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.

Page 17: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 15

Práctica: utilizar el control PrintPreviewDialog

In this practice, you will

Add a PrintPreviewDialog control

Create a PrintPreview subroutine

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. ____________________________________________________________

____________________________________________________________

Page 18: 13. Informes e Impresiones

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.

Page 19: 13. Informes e Impresiones

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.

Page 20: 13. Informes e Impresiones

18 Informes e impresión en aplicaciones Windows Forms

Cómo utilizar el control PageSetupDialog

Use PageSetupDialog to set page details in Windows Forms applications

Border and margin adjustmentsHeaders and footersPortrait vs. landscape

To use PageSetupDialog to specify page settings1.Create an instance of the PageSetupDialog control2.Use ShowDialog to display the dialog at run time3.Specify document settings by using the

DefaultPageSettings property or PageSettings class

PageSetupDialogPageSetupDialog

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 PageSetupDialog

Para utilizar PageSetupDialog y especificar las opciones de página:

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

Page 21: 13. Informes e Impresiones

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 del cuadro de diálogo PageSetup

El usuario puede habilitar secciones del cuadro de diálogo PageSetup para manipular la impresión, márgenes, la orientación del papel y el tamaño.

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

Page 22: 13. Informes e Impresiones

20 Informes e impresión en aplicaciones Windows Forms

Práctica: utilizar el control PageSetupDialog

In this practice, you will

Add a PageSetupDialog control to your application

Create a PageSetup subroutine that displays page settings

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. ____________________________________________________________

____________________________________________________________

Page 23: 13. Informes e Impresiones

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.

Page 24: 13. Informes e Impresiones

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. ____________________________________________________________

____________________________________________________________

____________________________________________________________

Page 25: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 23

Cómo utilizar el control PrintDialog

Use PrintDialog to specify printer-related settingsSpecify printer and print job properties Specify print range and collate settings

To use a PrintDialog control for users to select a printer1. Create an instance of the PrintDialog component2. Set the Document property to the PrintDocument object3. Capture user input by using the DialogResult property

and display the Print dialog box

PrintDialogPrintDialog

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

Page 26: 13. Informes e Impresiones

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

Page 27: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 25

Práctica: utilizar el control PrintDialog

In this practice, you will

Add a PrintDialog control to your application

Create a PrintDoc subroutine that displays the print dialog

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. ____________________________________________________________

____________________________________________________________

Page 28: 13. Informes e Impresiones

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. ____________________________________________________________

____________________________________________________________

____________________________________________________________

____________________________________________________________

Para más información sobre el objeto DialogResult, acceder a la documentación de ayuda de Visual Studio .NET. Nota

Page 29: 13. Informes e Impresiones

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.

Page 30: 13. Informes e Impresiones

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 FontsHow to Draw and Measure Text in the PrintPage Event ProcedureHow to Generate Print Content by Using StreamReaderDemonstration: 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.

Page 31: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 29

¿Qué es GDI+?

GDI+ (the new graphics device interface)

Enables applications to generate graphics and formatted text for the video display and the printer

Allows application developers to create device-independent applications

Three parts of GDI+

2-D vector graphics

Text

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.

Page 32: 13. Informes e Impresiones

30 Informes e impresión en aplicaciones Windows Forms

¿Qué es el objeto Graphics?

Graphics Object:Provides the drawing surface on which content is placedProvides methods for drawing text and graphics at specified locationsProvides various tools for modifying its contents

Dim myGraphic as Graphics

' draw lines or outlined shapes using a PenmyGraphic.DrawLine(myPen,X1,Y1,X2,Y2)

' draw filled shapes using a BrushmyGraphic.FillRectangle(myBrush,X1,Y1,X2,Y2)

' draw text using a Font and a BrushmyGraphic.DrawString(myText,myFont,myBrush,X1,Y1)

Dim myGraphic as Graphics

' draw lines or outlined shapes using a PenmyGraphic.DrawLine(myPen,X1,Y1,X2,Y2)

' draw filled shapes using a BrushmyGraphic.FillRectangle(myBrush,X1,Y1,X2,Y2)

' draw text using a Font and a BrushmyGraphic.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 en GDI+

El objeto Graphics es esencial a GDI+ en la construcción de contenido para el 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 Graphics

El objeto Graphics proporciona una extensa variedad de métodos que pueden 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.

Page 33: 13. Informes e Impresiones

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

Page 34: 13. Informes e Impresiones

32 Informes e impresión en aplicaciones Windows Forms

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

PensPensPens A pen is required to draw lines and outlined shapesA pen is required to draw lines and outlined shapes

BrushesBrushesBrushes A brush is required to draw filled shapes or draw textA brush is required to draw filled shapes or draw text

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

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

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

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

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 lápices

Un lápiz se utiliza para dibujar líneas, curvas y formas con contorno. Para crear 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

Page 35: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 33

Procedimiento: crear pinceles

Objetos Brush se utilizan para dibujar texto y formas rellenas. Podemos crear 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 fuentes

Antes de que podamos pintar texto con GDI+, debemos construir un objeto 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)

Page 36: 13. Informes e Impresiones

34 Informes e impresión en aplicaciones Windows Forms

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

To draw text1. Calculate the location for the text2. Select the Font and Brush that you want to use for this text3. Call the Graphics.DrawString method

e.Graphics.DrawString(myText, myFont, myBrush, X1, Y1)e.Graphics.DrawString(myText, myFont, myBrush, X1, Y1)

To measure texttextWidth = e.Graphics.MeasureString(myText,

myFont).WidthtextHeight = e.Graphics.MeasureString(myText,

myFont).Height

textWidth = e.Graphics.MeasureString(myText, myFont).Width

textHeight = e.Graphics.MeasureString(myText, 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 texto

Para construir texto para nuestro documento de impresión en el procedimiento 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)

Page 37: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 35

Procedimiento: medir texto

• Para medir texto, añadir código como se muestra en el procesador de 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)

Page 38: 13. Informes e Impresiones

36 Informes e impresión en aplicaciones Windows Forms

Cómo generar contenido de impresión utilizando StreamReader

Private Sub btnPrintPreviewControl_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles _ btnPrintPreviewControl.Click

TryStreamToPrint = New

StreamReader(“PrintMe.Txt”)Try

PrintPreviewControl()

FinallyStreamToPrint.Close()

End Try

Private Sub btnPrintPreviewControl_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles _ btnPrintPreviewControl.Click

TryStreamToPrint = New

StreamReader(“PrintMe.Txt”)Try

PrintPreviewControl()

FinallyStreamToPrint.Close()

End Try

Use StreamReader to read lines of information from a standard text file

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

Page 39: 13. Informes e Impresiones

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

Page 40: 13. Informes e Impresiones

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.

Page 41: 13. Informes e Impresiones

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.

Page 42: 13. Informes e Impresiones

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

Create pens, brushes, and fonts

Create 2-D vector objects

Measure and position text on the page

Begin reviewing the objectives for this practice activity 15 min

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.

Page 43: 13. Informes e Impresiones

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+.

Page 44: 13. Informes e Impresiones

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.

Page 45: 13. Informes e Impresiones

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.

Page 46: 13. Informes e Impresiones

44 Informes e impresión en aplicaciones Windows Forms

Crystal Reports

http://msdn.microsoft.com/vstudio/partners/toolshttp://msdn.microsoft.com/vstudio/partners/tools/crystaldecisions.asp/crystaldecisions.asp

Is the standard reporting tool in .NETAllows you to create a report from the beginning or use one of the Report Expert Wizards

You can use any programming languageReport viewers for Windows-based and Web applicationsRun-time customization of reportsEasy interaction with reportsData visualization and analysis capabilities

Crystal ReportsCrystal Reports

BenefitsBenefits

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.

Page 47: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 45

Cómo crear y formatear un informe utilizando Crystal Reports

Creating a Crystal Report by Using the Report Expert

Formatthe report

Formatthe report

Generatea report

Generatea report

Group items and create formulas

Select the required

fields

Select the required

fields

Choose a data source

Choose a template

Choose a template

Open the Report Expert

Open the Report 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 formatear un informe utilizando el Asistente de informes

Para crear y formatear informes utilizando el Asistente de informes:

1. Abrir el Asistente 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

Page 48: 13. Informes e Impresiones

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.

Page 49: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 47

Cómo visualizar un informe utilizando Crystal Report Viewer

Set ReportSource to the name of the report that is displayed

Add the Crystal Report Viewer control to the form

Use ShowZoomButton to zoom in and zoom out on the report

Use ShowPrintButton to print the report

To View a Report by Using Crystal Report ViewerTo View a Report by Using Crystal Report Viewer

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: visualizar un informe

Para visualizar un informe utilizando el control Crystal Report Viewer:

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.

Page 50: 13. Informes e Impresiones

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 rpt As New OrderHistory()Private dsReportInfo As New DataSet()dsReportInfo.ReadXml("NorthwindData.xml")rpt.SetDataSource(dsReportInfo)CrystalReportViewer1.ReportSource = rpt

Private rpt As New OrderHistory()Private dsReportInfo As New DataSet()dsReportInfo.ReadXml("NorthwindData.xml")rpt.SetDataSource(dsReportInfo)CrystalReportViewer1.ReportSource = rpt

Introducción Crystal Reports para Visual Studio .NET soporta crear informes que acceden a datasets ADO.NET.

Procedimiento: añadir un dataset ADO.NET a un informe

Para añadir 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

Page 51: 13. Informes e Impresiones

Informes e impresión en aplicaciones Windows Forms 49

Práctica: crear y visualizar informes Crystal Reports

In this practice, you will

Configure the SqlConnection1 control on Form1 to connect to the pubs database

Create a Crystal Report

Add a Crystal Report Viewer control to Form1

Begin reviewing the objectives for this practice activity

12 min

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.

Utilizar la información de conexión existente para la base de datos pubs si ya existe y saltar al siguiente procedimiento. Nota

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.

Page 52: 13. Informes e Impresiones

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.