You are on page 1of 7

Introduccin

Casi todas las aplicaciones web (que he construido) necesita algn tipo de informacin. Muchas veces el cliente quiere generar un informe PDF que se corresponde con la pgina web que l o ella est viendo. Usando iTextSharp , a C # biblioteca de PDF gratuito, esto es posible. En este artculo se describe e incluye una solucin para la creacin de informes mediante iTextSharp y ASP.NET MVC3.

Fondo
iTextSharp es una biblioteca de C # PDF gratuito que ha sido portado desde la biblioteca de Java-PDF iText . iText se puso en marcha en 2000 y es una popular librera Java de cdigo abierto para la creacin de programacin y la manipulacin de PDF. Al igual que en muchas bibliotecas de cdigo abierto de Java con xito, fue portado a C # con el nombre iTextSharp. iTextSharp ha estado en desarrollo desde 2008 y se distribuye bajo la GNU Affero General Versin Licencia Pblica 3 . En su esencia, iTextSharp es una API para manipular la creacin de PDF. Para un proyecto reciente, que estaba buscando una solucin que me permitiera crear documentos PDF a partir de documentos o vistas utilizados en un proyecto ASP.NET MVC3 HTML existentes. La solucin

ptima para m sera la de lanzar una vista MVC3 ASP.NET existente en ella y dejar que genere un archivo PDF que es exactamente el mismo que el HTML representado por un navegador. La solucin descrita aqu utiliza el HTMLWorker clase de iTextSharp para generar un PDF a partir de una vista HTML.HTMLWorker es un iTextSharp clase que es capaz de analizar un documento HTML y generar un PDF utilizando lo que se llama el SimpleParser de iTextSharp . Observe el nombre SimpleParser lo que indica que no se admiten todos los elementos HTML y estilos CSS. Sin embargo, tuve la oportunidad de obtener buenos resultados utilizando esta solucin. Para agregar informacin a su proyecto ASP.NET MVC3, agregue primero el proyecto PDFReportGenerator a la solucin y aadir el iTextSharp.dll binario para su solucin. PDFReportGenerator necesita una referencia a la binaria. Al aadir el binario a la solucin, que son capaces de construir el proyecto directamente desde el control de cdigo fuente.Compruebe la fuente de demostracin para un ejemplo.

Creacin de un informe
Siga estos pasos para generar un informe en cuestin de la aplicacin web: 1. Crear un controlador que se deriva de PdfViewController . 2. Crear una vista que genera el cdigo HTML que se debe traducir a un informe en PDF. 3. Crear una accin en un controlador que llama a la ViewPDF mtodo en el PdfViewController . 4. Crear un link para activar la accin del controlador. A continuacin, estos pasos se describen en ms detalle.

Crear un controlador que se deriva de PdfViewController


Crear un nuevo o volver a usar un controlador existente y dejar que se derivan de PdfViewController del proyecto PdfReportGenerator. Esto permite a su controlador para llamar al ViewPDF mtodo de la PDFViewController que genera el PDF real. En el proyecto de demostracin, este es el HomeController .

Crear una vista que genera el cdigo HTML


Crear una vista que debe ser traducido a un informe. Esto podra ser una vista existente o una nueva vista especialmente para la presentacin de informes. Por lo general crear un nuevo punto de vista, ya que me permite controlar el formato HTML para el informe. Como se dijo anteriormente, el generador de informes no admite todo el cdigo HTML. En el proyecto de demostracin, este es el PrintDemo vista.

A continuacin, se muestra la vista PrintDemo del proyecto de demostracin. Como se puede ver, se trata de una simple vista ASP.NET Razor con una mesa y algunas filas. Se utiliza un modelo inflexible de tipos, pero eso no es necesario. Un consejo cuando se trata de disear el informe es para agregar bordes a tu mesa o div . El uso de estas fronteras, cuando se mira en el archivo PDF, usted puede ver claramente el comienzo y el final de las reas de su informe.
Contraer | Copiar cdigo

@ Usando MvcReportGeneratorDemo.Models @ Modelo ListaClientes <br /> <table cellpadding="3" cellspacing="3"> <tr border="1" bgcolor="#777777" color="#ffffff"> <td>Name</td> <td>Address</td> <td>Place</td> </tr> @ Foreach (cliente del cliente en el modelo) { < tr frontera = " 1 " > < td > @ customer.Name < / td > < td > @ cliente.Direccion < / td > < td > @ customer.Place < / td > < / tr > } < / mesa >

Cree una accin que llama al mtodo ViewPDF


El PdfViewController clase de la que deriva su controlador contiene un ViewPDF mtodo. Este mtodo tiene la siguiente firma:
Contraer | Copiar cdigo

protegida ActionResult ViewPDF ( string pageTitle, cadena viewName, objeto de modelo)

Parmetros
o o o o o o

pageTitle Tipo: System.String El ttulo del informe, que aparece en el encabezado de la pgina. viewName Tipo: System.String El nombre de la vista que se debe convertir en un informe. modelo Tipo: System.Object El modelo que se representa por la vista.
Este mtodo genera la vista HTML y lo convierte en un informe PDF y enva el PDF como una secuencia binaria de vuelta al cliente. Esto significa que cuando el cliente tiene una de PDF plug-in instalado, el PDF se muestra en el navegador.

De una accin dentro de su controlador, este mtodo debe ser llamado para generar el informe y enviarlo al cliente. La siguiente accin de la aplicacin de demostracin genera el PDF. "Nuestros clientes" es el ttulo del informe, "PrintDemo es el nombre de la vista, y el modelo es devuelto por el CreateCustomerList () que como su nombre lo indica genera una lista ficticia con los clientes.
Contraer | Copiar cdigo

pblica PrintCustomers ActionResult () { devolver este . ViewPDF ( " informe del cliente " , " PrintDemo " , CreateCustomerList ()); }

El ltimo paso es crear un vnculo de una pgina que llama a esta accin para imprimir en realidad el informe.

Reinicie la accin en el controlador


Un mtodo simple para crear un enlace para activar la accin del controlador es mediante el uso de un ActionLink .Este enlace llama a la accin que hemos definido en el controlador.
Contraer | Copiar cdigo

@ Html.ActionLink ( " los clientes de impresin " , " PrintCustomers " , nula , {target = " _blank " })

nuevo

Estos son los pasos que tiene que ser capaz de crear informes en PDF desde sus proyectos ASP.NET MVC3. Lea la siguiente parte del artculo, si usted est interesado en los detalles de cmo la PdfReportGenerator realidad convierte la vista ASP.NET MVC3 en un informe.

Resumen detallado Reporte de Proyectos


El proyecto PdfReportGenerator consisten en seis clases que se pueden ver en la siguiente imagen. La asamblea PdfReportGenerator funciona haciendo que el MVC3 ASP.NET ver en una cadena y la conversin de esta cadena con HTML usando el iTextSharp en un informe en PDF.

Representacin de una vista ASP.NET MVC3 en una cadena


La clase HtmlViewRenderer es responsable de representar la opinin de ASP.NET en una cadena. El mtodoRenderViewToString tiene la siguiente firma.
Contraer | Copiar cdigo

pblica cadena RenderViewToString (controlador Controlador, cadena viewName, objeto viewData)

El primer argumento es viewName que es el nombre de la vista que deben quedar rendido a una cadena que incluye el modelo viewData que se necesita por la vista. El controlador es necesario ser capaz de utilizar para representar la vista usando el motor de vista de ASP.NET MVC.

Convertir la cadena HTML en una matriz de bytes PDF


Una vez que tenemos el cdigo HTML de una cadena, StandardPdfRenderer convierte la cadena HTML en una matriz de bytes PDF. La clase StandardPdfRenderer tiene un mtodo Render con la siguiente firma.

Contraer | Copiar cdigo

pblica

byte [] Render ( string htmlText, cadena ReportTitle)

htmlText es la vista representada como una cadena que fue producido por el HtmlViewRender ; pageTitle es, como su nombre indica, el ttulo del informe.

Enviar la matriz de bytes de vuelta al cliente como una corriente


El ltimo paso es convertir la matriz de bytes en una instancia de la BinaryContentResult clase. La claseBinaryContentResult deriva del ASP.NET MVC ActionResult . Anula ExecuteResult y devuelve el contenido como una secuencia binaria. La clase PdfViewController es la clase que combina estas clases. El mtodo ViewPDF utiliza todas las tres clases mencionadas anteriormente para generar el PDF como se muestra en el cdigo siguiente:
Contraer | Copiar cdigo

protegida ActionResult ViewPDF ( string pageTitle, cadena viewName, objeto de modelo) { / / Render la vista HTML en una cadena. cadena htmlText = esta htmlViewRenderer.RenderViewToString (. este , viewName, modelo); / / Que el HTML se rindi en un documento PDF a travs iTextSharp. byte [] buffer = standardPdfRenderer.Render (htmlText, pageTitle); / / . Devolver el PDF como una secuencia binaria al cliente devolver nueva BinaryContentResult (buffer, " application / pdf " ); }

Puntos de inters
Colores
iTextSharp soporta colores fuera de la caja, en la aplicacin de demostracin, los colores de fondo de las filas se alternan el uso de diferentes colores. Estos colores son visibles en el informe.

Nueva pgina de soporte


Una cosa que yo necesitaba con mi proyecto que no fue apoyado por la conversin de HTML en iTextSharp fue funcionalidad para forzar un salto de pgina. La mayor parte del tiempo, con los informes, tiene que ser capaz de forzar un salto de pgina, por ejemplo, si desea un grfico para comenzar siempre en una pgina nueva. La forma en que lo resolvi fue aadir soporte para l a iTextSharp. Como es de cdigo abierto, que son capaces de aadir nuevas funciones a la misma. He aadido soporte para una etiqueta HTML no existente llamado <np /> que

obliga iTextSharp para crear una nueva pgina. He creado un parche para que pudiera estar comprometido con el proyecto iTextSharp .No s si va a ser incluido en el tronco principal del proyecto, ya que se siente un poco extrao para inventar nuevas etiquetas HTML slo para apoyar un salto de pgina. Pero si usted lo necesita, puede utilizar la revisin para compilar iTextSharp con la nueva pgina de soporte.

Imgenes
Es posible agregar imgenes para el informe mediante una /> <img src="" etiqueta. Yo no tena xito con las imgenes generadas dinmicamente. As que me generan las imgenes que necesitaba antes de que el proceso de conversin de la accin tiene lugar. Una sola imagen esttica se puede ver en el informe.

Soporte ASP.NET
Debera ser posible utilizar el mismo tipo de solucin con las versiones anteriores de ASP.NET MVC. Sin embargo, yo no lo he probado.