Reportes e impresión desde proyecto web asp.net mvc 3

1,770 views
Skip to first unread message

Mariano Marcon

unread,
Nov 17, 2011, 3:48:04 PM11/17/11
to AltNet-Hispano
Hola

Queria saber que recomiendan usar para la generacion e impresion de
reportes en un proyecto web asp.net mvc 3
Es decir ademas de la información que se muestra por pantalla,
permitir la impresion y/o exportación de la misma a pdf, excel, etc

Muchas gracias!!

Mariano Marcon

Walter Poch

unread,
Nov 17, 2011, 4:09:07 PM11/17/11
to altnet-...@googlegroups.com
Nosotros lo manejamos de dos formas,

Armando un HTML imprimible, y si eso no alcanza usamos PDFs:
También tenemos algunos Excel con (http://npoi.codeplex.com/)

Saludos,


Mariano Marcon

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.




--
Saludos,

Walter G. Poch
Sr. .Net Developer
--------------------------------------------
Cell: +54 (9 341) 3353273
walte...@gmail.com

Leonardo Micheloni

unread,
Nov 17, 2011, 5:18:33 PM11/17/11
to altnet-...@googlegroups.com
yo he usado la dll Microsoft.Reporting (el motorcito sería) para generar reportes, antes usaba iTextSharp, la ventaja de Reporting es que tiene un diseñador visual, si bien, tiene cosas oscuras; si necesitás algún ejemplo te puedo pasar algo, ahora no tengo nada a mano. Los reportes serían archivos XML que renderiza el motorcito (dos dll)
 
saludos, Leonardo.

2011/11/17 Walter Poch <walte...@gmail.com>



--
Leonardo Micheloni
@leomicheloni

Walter Poch

unread,
Nov 17, 2011, 7:42:14 PM11/17/11
to altnet-...@googlegroups.com
Leonardo, y que tal es la performance del Reporting?, genera .pdf?

Pregunto porque parece interesante =)

Leonardo Micheloni

unread,
Nov 18, 2011, 7:14:22 AM11/18/11
to altnet-...@googlegroups.com

Agregás

Microsoft.ReportViewer.Common
Microsoft.ReportViewer.WebForms

para generar un PDF

public byte[] OnTheFlyRender(System.IO.Stream reportDefinition, ExtraData dataSourceValue, PDFDeviceInfo deviceInfo)
{
 LocalReport lr = new LocalReport();

 if (deviceInfo == null)
  deviceInfo = PDFDeviceInfo.Default();

 lr.LoadReportDefinition(reportDefinition); //el rdlc
 parameters.Add(new ReportParameter("NombreDataSourceEnElReporte", dataSourceValue));

 lr.EnableExternalImages = true;

 lr.SetParameters(parameters);

 lr.Refresh();
 
 Warning[] warnings;
 string[] streamids;
 string mimeType;
 string encoding;
 string extension;

 byte[] bytes = lr.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings);

 return bytes;
}

 


namespace PDF.Reporting
{
    /// <summary>
    /// Representa las opcioines de generación de PDF de la clase LocalReport segúin documentación en
    /// http://msdn.microsoft.com/en-us/library/ms154682.aspx
    /// </summary>
    [System.Xml.Serialization.XmlRoot("DeviceInfo")]
    public class PDFDeviceInfo
    {
        public static PDFDeviceInfo Default()
        {
            var deviceInfo = new PDFDeviceInfo();

            deviceInfo.PageHeight = "8.5in";
            deviceInfo.PageWidth = "11in";
            deviceInfo.MarginTop = "0.5in";
            deviceInfo.MarginRight = "1in";
            deviceInfo.MarginLeft = "1in";
            deviceInfo.MarginBottom = "0.5in";

            return deviceInfo;
        }


        /// <summary>
        /// The number of columns to set for the report. This value overrides the report's original settings.
        /// </summary>
        public string Columns { get; set; }

        /// <summary>
        /// The column spacing to set for the report. This value overrides the report's original settings.
        /// </summary>       
        public string ColumnSpacing { get; set; }

        /// <summary>
        /// The last page of the report to render. The default value is the value for StartPage.
        /// </summary>
        public string EndPage { get; set; }

        /// <summary>
        /// Indicates whether the PDF should be compressed, which allows the source to be more readable. The default value is false.
        /// </summary>
        public string HumanReadablePDF { get; set; }

        /// <summary>
        /// The bottom margin value, in inches, to set for the report. You must include an integer or decimal value followed by "in" (for example, 1in). This value overrides the report's original settings.
        /// </summary>
        public string MarginBottom { get; set; }

        /// <summary>
        /// The left margin value, in inches, to set for the report. You must include an integer or decimal value followed by "in" (for example, 1in). This value overrides the report's original settings.
        /// </summary>
        public string MarginLeft { get; set; }

        /// <summary>
        /// The right margin value, in inches, to set for the report. You must include an integer or decimal value followed by "in" (for example, 1in). This value overrides the report's original settings.
        /// </summary>
        public string MarginRight { get; set; }

        /// <summary>
        /// The top margin value, in inches, to set for the report. You must include an integer or decimal value followed by "in" (for example, 1in). This value overrides the report's original settings.
        /// </summary>
        public string MarginTop { get; set; }

        /// <summary>
        /// The page height, in inches, to set for the report. You must include an integer or decimal value followed by "in" (for example, 11in). This value overrides the report's original settings.
        /// </summary>
        public string PageHeight { get; set; }

        /// <summary>
        /// The page width, in inches, to set for the report. You must include an integer or decimal value followed by "in" (for example, 8.5in). This value overrides the report's original settings.
        /// </summary>
        public string PageWidth { get; set; }

        /// <summary>
        /// The first page of the report to render. A value of 0 indicates that all pages are rendered. The default value is 1.
        /// </summary>
        public string StartPage { get; set; }

        public override string ToString()
        {
            var stream = new MemoryStream();

            var serializer = new XmlSerializer(this.GetType(),"");

            serializer.Serialize(stream, this);

            return Encoding.UTF8.GetString(stream.GetBuffer());
        }
    }
}

 
El byte[] lo podés escribir a disco o sobre el stream del response web, y listo, el código puede tener algún bug, no lo probé, pero no es más que eso, el punto oscuro es cómo agregar dataSource, yo me volví loco y terminé usando el Reflector para ver cómo funcionaba, pero al final lo resolví. La verdad es que el tema del diseñador suma mucho, acá se hacen muchos reportes y a muchas veces los clientes piden poner le línea más gruesa, con iTextSharp era durísimo, vos lo sabrás, con esto se agilizó mucho, actualmente montamos un web service que resuelve los reportes porque además cada clientes (son más de 100) tiene el propio, nos pasan una impresión de cómo lo hacen ahora y tenemos que replicarlo imaginate que con iTextSharp era una locura.
Saludos, Leonardo.

Walter Poch

unread,
Nov 18, 2011, 8:53:09 AM11/18/11
to altnet-...@googlegroups.com
Gracias Leonardo, si con iTextSharp hay que sacar la regla y andar midiendo todo... o armar algo muy simple. Nosotros usamos PDF bases como templates y después le pegamos el contenido. 

El próximo reporte que tenga que hacer lo voy a revisar. 

Muchas gracias!

Esteban Grinberg

unread,
Nov 18, 2011, 9:14:50 AM11/18/11
to altnet-...@googlegroups.com
Yo uso para PDFs, PDF Sharp, http://www.pdfsharp.net/MainPage.ashx
Lo que mas me gusta de esta libreria, es que tiene las mismas interfaces que GDI+, con lo cual, si conoces como es la estructura de objetos de GDI+, no tenes que aprender nada nuevo y te permite (y en nuestro caso fue util), armar con muy pero muy poco codigo, un reporte que se exporte a imagen o a PDF.

Con respecto a la dll de Reporting Services, si bien, en teoria es una buena idea, yo prefiero la condena eterna en el infierno antes que volver a tocar Reporting Service...

Saludos,
Esteban


2011/11/18 Walter Poch <walte...@gmail.com>

Leonardo Micheloni

unread,
Nov 18, 2011, 10:50:11 AM11/18/11
to altnet-...@googlegroups.com
Esteban, no uso Reporting Services, sino las librerías de Microsoft.Reporting para renderizar desde una aplicación web o servicio, Reporting Services es un "mostro"

2011/11/18 Esteban Grinberg <esteban....@gmail.com>



--
Leonardo Micheloni
@leomicheloni

Claudio Meschini

unread,
Nov 18, 2011, 6:09:24 PM11/18/11
to altnet-...@googlegroups.com
Leo:

Podrías ampliar un poco este punto?


el punto oscuro es cómo agregar dataSource, yo me volví loco y terminé usando el Reflector para ver cómo funcionaba, pero al final lo resolví.


o una pista de como lo resolviste? Ya que el problema de generar reportes con "Reporting Services" para quienes trabajamos con DDD es pasarle el modelo para renderizar.
Gracias.

Saludos, Claudio.

Leonardo Micheloni

unread,
Nov 19, 2011, 8:03:12 AM11/19/11
to altnet-...@googlegroups.com
Es poco clara la forma de agregar datasource, hice un post al respecto

http://leomicheloni.blogspot.com/2010/05/error-poco-descriptivo-en-microsoft.html

cualquier cosa avisame, el código que funciona es el que pasá antes a Walter.

saludos,

2011/11/18 Claudio Meschini <cmes...@gmail.com>



--
Leonardo Micheloni
@leomicheloni

Claudio Meschini

unread,
Nov 19, 2011, 8:36:27 AM11/19/11
to altnet-...@googlegroups.com
Muchas gracias por la aclaración.
Ahora entiendo algunos errores que encontraba al usarlo.

Saludos, Claudio
Reply all
Reply to author
Forward
0 new messages