You are on page 1of 7

Introducción

Casi todas las aplicaciones web (que he construido) necesita algún tipo de información. Muchas veces el cliente quiere generar un informe PDF que se corresponde con la página web que él o ella está viendo. Usando iTextSharp , a C # biblioteca de PDF gratuito, esto es posible. En este artículo se describe e incluye una solución para la creación 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 librería Java de código abierto para la creación de programación y la manipulación de PDF. Al igual que en muchas bibliotecas de código 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 Versión Licencia Pública 3 . En su esencia, iTextSharp es una API para manipular la creación de PDF. Para un proyecto reciente, que estaba buscando una solución que me permitiera crear documentos PDF a partir de documentos o vistas utilizados en un proyecto ASP.NET MVC3 HTML existentes. La solución

Compruebe la fuente de demostración para un ejemplo. En el proyecto de demostración. este es el HomeController . Esto permite a su controlador para llamar al ViewPDF método de la PDFViewController que genera el PDF real. 4. Observe el nombre SimpleParser lo que indica que no se admiten todos los elementos HTML y estilos CSS. Al añadir el binario a la solución. Crear una vista que genera el código HTML Crear una vista que debe ser traducido a un informe. 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. Para agregar información a su proyecto ASP. Crear un link para activar la acción del controlador. A continuación. En el proyecto de demostración. 3. estos pasos se describen en más detalle.óptima para mí sería la de lanzar una vista MVC3 ASP. que son capaces de construir el proyecto directamente desde el control de código fuente. agregue primero el proyecto PDFReportGenerator a la solución y añadir el iTextSharp. Por lo general crear un nuevo punto de vista. Crear una acción en un controlador que llama a la ViewPDF método en el PdfViewController . Creación de un informe Siga estos pasos para generar un informe en cuestión de la aplicación web: 1. Como se dijo anteriormente. Sin embargo.NET existente en ella y dejar que genere un archivo PDF que es exactamente el mismo que el HTML representado por un navegador. PDFReportGenerator necesita una referencia a la binaria. La solución descrita aquí utiliza el HTMLWorker clase de iTextSharp para generar un PDF a partir de una vista HTML.NET MVC3. este es el PrintDemo vista. Crear una vista que genera el código HTML que se debe traducir a un informe en PDF. . el generador de informes no admite todo el código HTML. 2. Esto podría ser una vista existente o una nueva vista especialmente para la presentación de informes.dll binario para su solución.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 . Crear un controlador que se deriva de PdfViewController . ya que me permite controlar el formato HTML para el informe. tuve la oportunidad de obtener buenos resultados utilizando esta solución.

Un consejo cuando se trata de diseñar el informe es para agregar bordes a tu mesa o div . Se utiliza un modelo inflexible de tipos. Como se puede ver. modelo Tipo: System. usted puede ver claramente el comienzo y el final de las áreas de su informe. . que aparece en el encabezado de la página.Name < / td > < td > @ cliente. pero eso no es necesario. Esto significa que cuando el cliente tiene una de PDF plug-in instalado.Object El modelo que se representa por la vista. viewName Tipo: System.NET Razor con una mesa y algunas filas.Direccion < / td > < td > @ customer.String El nombre de la vista que se debe convertir en un informe. Este método genera la vista HTML y lo convierte en un informe PDF y envía el PDF como una secuencia binaria de vuelta al cliente. cuando se mira en el archivo PDF. se muestra la vista PrintDemo del proyecto de demostración. cadena viewName. objeto de modelo) Parámetros  o o  o o  o o pageTitle Tipo: System. Contraer | Copiar código @ Usando MvcReportGeneratorDemo. el PDF se muestra en el navegador. El uso de estas fronteras. se trata de una simple vista ASP.String El título del informe.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.Place < / td > < / tr > } < / mesa > Cree una acción que llama al método ViewPDF El PdfViewController clase de la que deriva su controlador contiene un ViewPDF método. Este método tiene la siguiente firma: Contraer | Copiar código protegida ActionResult ViewPDF ( string pageTitle.A continuación.

" PrintCustomers " . } El último paso es crear un vínculo de una página que llama a esta acción para imprimir en realidad el informe. Contraer | Copiar código pública PrintCustomers ActionResult () { devolver este .NET MVC3. este método debe ser llamado para generar el informe y enviarlo al cliente. Reinicie la acción en el controlador Un método simple para crear un enlace para activar la acción del controlador es mediante el uso de un ActionLink . Resumen detallado Reporte de Proyectos El proyecto PdfReportGenerator consisten en seis clases que se pueden ver en la siguiente imagen. Contraer | Copiar código @ Html.NET MVC3 en un informe. CreateCustomerList ()). nula . "Nuestros clientes" es el título del informe. " PrintDemo " .NET ver en una cadena y la conversión de esta cadena con HTML usando el iTextSharp en un informe en PDF.Este enlace llama a la acción que hemos definido en el controlador.ActionLink ( " los clientes de impresión " . si usted está interesado en los detalles de cómo la PdfReportGenerator realidad convierte la vista ASP. La siguiente acción de la aplicación de demostración genera el PDF. ViewPDF ( " informe del cliente " . {target = " _blank " }) nuevo Estos son los pasos que tiene que ser capaz de crear informes en PDF desde sus proyectos ASP. Lea la siguiente parte del artículo. . "PrintDemo es el nombre de la vista.De una acción dentro de su controlador. y el modelo es devuelto por el CreateCustomerList () que como su nombre lo indica genera una lista ficticia con los clientes. La asamblea PdfReportGenerator funciona haciendo que el MVC3 ASP.

. El controlador es necesario ser capaz de utilizar para representar la vista usando el motor de vista de ASP. 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. La clase StandardPdfRenderer tiene un método Render con la siguiente firma. StandardPdfRenderer convierte la cadena HTML en una matriz de bytes PDF. cadena viewName. Convertir la cadena HTML en una matriz de bytes PDF Una vez que tenemos el código HTML de una cadena. El métodoRenderViewToString tiene la siguiente firma.NET MVC.NET en una cadena. Contraer | Copiar código pública cadena RenderViewToString (controlador Controlador.Representación de una vista ASP.NET MVC3 en una cadena La clase HtmlViewRenderer es responsable de representar la opinión de ASP.

pageTitle). por ejemplo.RenderViewToString (. / / Que el HTML se rindió en un documento PDF a través iTextSharp. modelo). He añadido soporte para una etiqueta HTML no existente llamado <np /> que . / / . } Puntos de interés Colores iTextSharp soporta colores fuera de la caja. cadena ReportTitle) htmlText es la vista representada como una cadena que fue producido por el HtmlViewRender . byte [] buffer = standardPdfRenderer. Anula ExecuteResult y devuelve el contenido como una secuencia binaria.NET MVC ActionResult . Devolver el PDF como una secuencia binaria al cliente devolver nueva BinaryContentResult (buffer. con los informes. Estos colores son visibles en el informe. Como es de código abierto. cadena htmlText = esta htmlViewRenderer.Contraer | Copiar código pública byte [] Render ( string htmlText. como su nombre indica. Nueva página de soporte Una cosa que yo necesitaba con mi proyecto que no fue apoyado por la conversión de HTML en iTextSharp fue funcionalidad para forzar un salto de página.Render (htmlText. La forma en que lo resolvió fue añadir soporte para él a iTextSharp. si desea un gráfico para comenzar siempre en una página nueva. objeto de modelo) { / / Render la vista HTML en una cadena. tiene que ser capaz de forzar un salto de página. La mayor parte del tiempo. " application / pdf " ). los colores de fondo de las filas se alternan el uso de diferentes colores. La claseBinaryContentResult deriva del ASP. El método ViewPDF utiliza todas las tres clases mencionadas anteriormente para generar el PDF como se muestra en el código siguiente: Contraer | Copiar código protegida ActionResult ViewPDF ( string pageTitle. este . cadena viewName. en la aplicación de demostración. viewName. La clase PdfViewController es la clase que combina estas clases. el título 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. pageTitle es. que son capaces de añadir nuevas funciones a la misma.

Sin embargo. Pero si usted lo necesita.NET MVC. Imágenes Es posible agregar imágenes para el informe mediante una /> <img src="" etiqueta. Así que me generan las imágenes que necesitaba antes de que el proceso de conversión de la acción tiene lugar. Soporte ASP. ya que se siente un poco extraño para inventar nuevas etiquetas HTML sólo para apoyar un salto de página.No sé si va a ser incluido en el tronco principal del proyecto. puede utilizar la revisión para compilar iTextSharp con la nueva página de soporte. Una sola imagen estática se puede ver en el informe.obliga iTextSharp para crear una nueva página. . Yo no tenía éxito con las imágenes generadas dinámicamente. yo no lo he probado.NET Debería ser posible utilizar el mismo tipo de solución con las versiones anteriores de ASP. He creado un parche para que pudiera estar comprometido con el proyecto iTextSharp .