Exportar Crystal Report Document a Excel, PDF, Word, RichText o HTML desde código

Una funcionalidad que siempre es requerida para cualquier tipo de reporte (en cualquier formato) es su exportación a otros formatos. En Crystal Report para ASP.NET 2.0 tenemos metodos ya disponibles para realizar esta tarea. Una de las preguntas desde los grupos de noticias o foros es como realizarlo desde el codebehind.

Primeramente necesitamos importar los espacios de nombre:

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

El primero para el reportDocument y el segundo para las opciones de exportacion.

Veamos un ejemplo para exportar a PDF desde el codebehind, sin la necesidad de enviar a impresion (ya que por defecto la impresion viene con salida en modo PDF, y la podemos cambiar a modo ActiveX)
Si tenemos un boton:

<asp:Button ID="btnExportarAPDF" runat="server" Text="Exportar a PDF" />

Podemos hacer algo asi:

Protected Sub btnExportarAPDF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportarAPDF.Click

       'Cargar reporte. Enlazando a la fuente de datos.
       ReporteCargar()

       'Mas adelante veremos que estas lineas las podemos obviar
       Response.Buffer = False Response.Clear() 'ClearContent, ClearHeaders reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "NombreArchivo") End Sub

Nota: El metodo ReporteCargar enlaza la fuente de datos al reportDocument que luego lo visualizamos con un ReportViewer, pero en este ejemplo queremos no visualizarlo sino exportarlo

Podemos ver la forma del metodo ExportToHttpResponse

image

 

El primer parametro FormatType que es un valor de ExportFormatType con estos

image

CrystalReport     El formato de exportación del informe es un archivo de Crystal Report.
Excel    El formato de exportación del informe es un archivo de Microsoft Excel.
ExcelRecord   El formato de exportación del informe es un archivo Excel Record.
HTML32     El formato de exportación del informe es un archivo HTML 3.2.
HTML40   El formato de exportación del informe es un archivo HTML 4.0.
NoFormat   No se ha especificado el formato de exportación.
PortableDocFormat     El formato de exportación del informe es un archivo PDF.
RichText     El formato de exportación del informe es un archivo de texto enriquecido.
WordForWindows     El formato de exportación del informe es un archivo de Microsoft Word.

 

Segundo parametro el objeto Response actual (es para “adozarlo”).. aqui podemos tener una idea de que dentro del metodo realiza ya los pasos para limpiar la salida de response y adozar el archivo

Tercer parametro, si va o no como un objeto incrustado (inline o attachment) si colocamos True es lo mismo que si estamos limpiando la respuesta y solamente enviando el archivo como parametro esto hara estas lineas innecesarias, ya que el mismo metodo se encargara de realizarlo.

Response.Buffer = False
Response.Clear()
Logrando que al visiante visualice el mensaje de que si desea Abrirlo o Guardarlo

image

 

Nuestro código queda mas simple 😉

Protected Sub btnExportarAPDF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportarAPDF.Click

       'Cargar reporte. Enlazando a la fuente de datos.
       ReporteCargar()

       reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "NombreArchivo")
   
   End Sub

 

Para finalizar podemos decir que este tipo de exportacin tiene un nivel mas general con el metodo .Export del reportDocument que con opciones puede configurarse para la misma tarea, solo que ya tenemos el metodo para enviarlo a la respuesta de la pagina.
Tambien tenemos ExportToDisk (como se imaginaran la misma tarea de exportacion a un archivo fisico), y ExportToStream (a una secuencia de datos en formato especificado). Con este ultimo podemos tambien lograr la salida a response.. pero tendriamos que hacer todos los pasos por nosotros mismos (mas artesanal como siempre digo)

 

Enlaces:

104 comentarios en “Exportar Crystal Report Document a Excel, PDF, Word, RichText o HTML desde código”

  1. Uno de los mejores articulos de exportacion de crystal….. habia buscado por todos lados ….. ya lo habia solucionado el tema… pero me quedaban muchas cosas dando vuelta.
    Pero tengo una duda, yo estoy haciendo reportes masivos, osea le estoy enviando varios parametros al reporte y este me imprime una cantidad considerable facturas, cuando lo visualizo con crystal todo bien pero al agragarle la linea

    rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, “ExportedReport”);

    que es la que me lo exporta, este no asume los cambios….??????

  2. Hola Dario
    Gracias por el comentario.
    Con respecto a lo que comentas “no asume los cambios” que significa? no realiza la consulta?
    Tienes que “enlazarlo” al reportDocument en tu caso se llama rpt nuevamente a los datos.

  3. Estoy usando visual 2005 y quiero exportar a PDF, pero use las etiquetas inteligentes para hacer todo, osea que no tengo codigo que cargue el reporte en el crystalviewer, como puedo hacer en este caso?

  4. Hola Jorge
    No lo probe pero seguro deberias obtener el reporte para poder exportarlo.
    Prueba lo siguiente:
    (necesitas estas importaciones de namespaces)
    Imports CrystalDecisions.Shared
    Imports CrystalDecisions.CrystalReports.Engine

    (aqui va el codigo)
    Dim reporteDoc As ReportDocument = Me.CrystalReportViewer1.ReportSource
    reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, “NombreArchivo”)

    Espero que te sirva

  5. Jose mucha gracias por tu ayuda, al final lo solucione asi

    Me.CrystalReportSource1.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, “Nombrearchivo”)

  6. Unable to connect: incorrect log on parameters.

    Aca el codigo:

    CrystalDecisions.Shared.TableLogOnInfo TableLogOnInfo = new CrystalDecisions.Shared.TableLogOnInfo();

    CrystalDecisions.Shared.TableLogOnInfos TableLogOnInfos = new CrystalDecisions.Shared.TableLogOnInfos();

    CrystalDecisions.Shared.ConnectionInfo ConnectionInfo = new CrystalDecisions.Shared.ConnectionInfo();

    ConnectionInfo.DatabaseName = ConfigurationManager.AppSettings[“baseDatos”];

    ConnectionInfo.ServerName = ConfigurationManager.AppSettings[“servidorBD”];

    ConnectionInfo.UserID = ConfigurationManager.AppSettings[“userID”];

    ConnectionInfo.Password = ConfigurationManager.AppSettings[“password”];

    TableLogOnInfo.ConnectionInfo = ConnectionInfo;

    TableLogOnInfos.Add(TableLogOnInfo);

    CrystalReportViewer1.LogOnInfo = TableLogOnInfos;

    CrystalReportSource1.Report.Parameters[0].DefaultValue = sCveRemesa;

    CrystalReportViewer1.RefreshReport();

    CrystalReportSource1.ReportDocument.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, false, “”);

    Es en web en c#, alguna observacion?
    Cualquier ayuda bienvenida, de antemano, muchas gracias!

  7. Hola Raymundo
    El codigo esta bien, solo que parece que la parte de login los parámetros son incorrectos.
    Pruebalo con los parametros en “crudo”, algo asi:
    ConnectionInfo.DatabaseName = “Northwind”
    ConnectionInfo.ServerName = “Yoda”
    ConnectionInfo.UserID = “sa”
    ConnectionInfo.Password = “sa”
    Para corroborar.

    Porque no puede “reproducir el mismo error”
    Otro tema en tu diseño tienes algo asi no?



    Espero que te sirva, sino comentame como estas obteiendo los datos de la DB entonces puedo reproducir tu ambiente.
    Saludos.

  8. Este es el html:




    Los parametros de conexion son correctos, esto debido a que al poner la sentencia para exportar fue cuando me empezo a marcar el error, antes funcionaba correctamente…

    CrystalReportSource1.ReportDocument.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, false, “”);

    En fin, el reporte lo diseñec con conexiones directamente a la base de datos, el codigo de parametros de conexion fue para que no me pidiera nuevamente el password de la base en ejecucion.

    A resumidas cuentas, mi problema es que ocupo imprimir directamente el reporte a pdf en el navegador sin que me salga la ventana de print options. Espero que me puedan ayudar, muchas gracias por la atencion.

  9. Por fin pude reproducir el error:
    Logon failed.
    Details: ADO Error Code: 0x
    Source: Microsoft OLE DB Provider for SQL Server
    Description: Login failed for user ‘sa’.
    SQL State: 42000
    Native Error: Error in File C:DOCUME~1JOSEFE~1LOCALS~1TemprptCategoriasDirectoDB {38C462E2-784F-4709-9FA0-B50FDBE4FF3C}.rpt:
    Unable to connect: incorrect log on parameters.

    Lo miro por la mañana y veo por donde va la solucion…

  10. Hola nuevamente Raymundo
    Lo que hice para solucionar fue colocar la linea que exporta en el evento PreRender del CrystalReportViewer1

    Protected Sub CrystalReportViewer1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles CrystalReportViewer1.PreRender
    Dim rpt As ReportDocument = Me.CrystalReportSource1.ReportDocument
    rpt.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, False, “”)

    End Sub

    Espero que te sirva de ayuda o guia

  11. Listo!

    En mi caso no fue en el evento PreRender, sino en el BeforeRender :s, pero al fin se soluciono.

    Disculpa, no habia contestado debido al fin de semana, me desligo del trabajo lo mas que puedo jeje.

    Por tu atencion, te estoy muy agradecido, ahora se que alguna duda, puedo contar con tu blog, quiza algun dia pueda aportar algun comentario de valor.

    De nueva cuenta, gracias.

  12. Hola Lisseth
    De donde sacas este metodo? CreateCrystalReportDocument?? es un componente que lo armaste?
    Lo que si veo es que te devuelve un ReportDocument ya que luego lo asignas como ReportSource.
    Cuando llamas a tu evento exportar tendras que ejecutar los mismos pasos para armar el reporte. Entonces la idea es que encapsules en un metodo lo que ahora tienes en el Load de la pagina.

  13. Gracias por contestar, ese metodo sale de una clase que uso para las conexiones y parametros, aqui esta el codigo de toda la clase:

    public class Crystal
    {
    public Crystal()
    {
    }

    public CrystalDecisions.Shared.ConnectionInfo logInfo;
    public string rutaRpt;

    public void conectar()
    {
    logInfo = new CrystalDecisions.Shared.ConnectionInfo();
    logInfo.ServerName = “XYZ”;
    logInfo.DatabaseName = “xyz”;
    logInfo.IntegratedSecurity = true;

    }

    private static void logonrpt(ref ReportDocument rpt) {
    Tables tables = rpt.Database.Tables;
    Crystal cr1 = new Crystal();
    foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
    {
    TableLogOnInfo tableLogonInfo = table.LogOnInfo;
    tableLogonInfo.ConnectionInfo = cr1.logInfo;
    table.ApplyLogOnInfo(tableLogonInfo);
    }
    }

    public ReportDocument CreateCrystalReportDocument(string ruta)
    {
    ReportDocument rpt = new ReportDocument();
    rpt.Load(ruta);
    conectar();
    Tables tables = rpt.Database.Tables;
    foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
    {
    TableLogOnInfo tableLogonInfo = table.LogOnInfo;
    tableLogonInfo.ConnectionInfo = logInfo;
    table.ApplyLogOnInfo(tableLogonInfo);
    }
    return rpt;
    }

    public ParameterField parameter(string id,string valor)
    {
    ParameterField parametro = new ParameterField();//envio el nombre del parametro
    ParameterDiscreteValue dVal = new ParameterDiscreteValue();//envio el valor del parametro
    parametro.Name = id;//asigno el nombre del parametro
    dVal.Value = valor;//asigno el valor del parametro
    parametro.CurrentValues.Add(dVal);//adhiero a la coleccion de parametros
    return parametro;

    }

    public ParameterField parameter2(string p1, string p2, string p3, string p4, string p5, string v1,
    string v2, string v3,string v4, string v5 )
    {
    ParameterField parametro = new ParameterField();//envio el nombre del parametro
    ParameterDiscreteValue dVal = new ParameterDiscreteValue();//envio el valor del parametro

    parametro.Name = p1;//asigno el nombre del parametro
    dVal.Value = v1;//asigno el valor del parametro
    parametro.CurrentValues.Add(dVal);//adhiero a la coleccion de parametros
    return parametro;

    }

    Pero a que se refiere cuando me aconseja que el evento click del boton exportar siga los mismas pasos para armar el reporte??
    Yo sé que debe ser sumamente sencillo lo que pregunto pero soy nueva en c# y crystal report.

    Gracias por su ayuda.

    }

  14. Hola nuevamente, siguiendo su consejo hice esto:

    public partial class ViewReport : System.Web.UI.Page
    {
    ReportDocument rpt = new ReportDocument();

    protected void Page_Load(object sender, EventArgs e)
    {
    CargarReporte();

    }
    protected void CrystalReportViewer1_Unload(object sender, EventArgs e)
    {
    rpt.Close();
    rpt.Dispose();
    }
    protected void btn_exportar_Click(object sender, EventArgs e)
    {
    CargarReporte();
    rpt.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, true, “”);

    }

    protected void CargarReporte()
    {
    string p1 = “@codProd”;//crea el parametro del procedimiento almacenado
    string p2 = Request.QueryString.Get(“ItemId”);
    Crystal cr = new Crystal();
    //ReportDocument rpt = new ReportDocument();
    string reportPath = Server.MapPath(“CRPartida.rpt”);
    //creo variable para el envio de parametros
    ParameterField parametro = new ParameterField();//envio el nombre del parametro
    parametro = cr.parameter(p1, p2);
    rpt = cr.CreateCrystalReportDocument(reportPath);
    CrystalReportViewer1.ParameterFieldInfo.Add(parametro);
    CrystalReportViewer1.ReportSource = rpt;
    CrystalReportViewer1.DataBind();
    }
    }

    Pero me sigue saliendo el mismo error:

    Missing parameter values.

    Line 65: rpt.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, true, “”);

    Ayuda por favor es que necesito eso de suma urgencia para mi trabajo ;(

  15. Hola Lisseth
    Gracias por copiar la clase, esta probando y el inconveniente es que estas pasando el parametro al CrystalReportViewer, y la buenas practicas dice que debes pasarlo al ReportDocument.
    En tu codigo deberias cambiar esta linea
    CrystalReportViewer1.ParameterFieldInfo.Add(parametro);
    Por esta otra
    rpt.SetParameterValue(p1, p2)

    Todo lo demas sigue igual a como estaba.
    Comentame como te fue

  16. Muchas gracias José, por fin logré exportar a .pdf mi reporte después de probar un montón de artículos, oye pero una última cosilla no me salió el recuadro de tu artículo que si quiero guardar el archivo o abrirlo, sino que de una se me abrio el pdf en el mismo browser, a que se deberá esto?
    Una consulta tu creas que pueda exportar de la misma forma como exporto a excel a otros formatos como .doc o .xls escogiendo dicho fomato desde un dropdownlist(combo)?

    Muchas gracias nuevamente.

  17. Ya me salió la exportación desde el combo a varios formatos para escoger y me sale el recuadro de abrir, guardar o cancelar la exportación.

    Muchas gracias José por su ayuda!!!!! 😉

  18. Hola nuevamente, el problema de la exportación de crystal reports a pdf continua, es decir al cambiar lo que José me dijo:

    En tu codigo deberias cambiar esta linea

    CrystalReportViewer1.ParameterFieldInfo.Add(parametro);

    Por esta otra

    rpt.SetParameterValue(p1, p2)

    se solucionó para ese reporte que solo tenia 1 parametro pero al hacerlo para un reporte que tiene varios parametros me sale el siguiente error:

    Line 51: rpt = cr.CreateCrystalReportDocument(reportPath);
    Line 52: //crv_completo.ParameterFieldInfo = parametro;
    Line 53: rpt.ParameterFields.Add(parametro);
    Line 54: crv_completo.ReportSource = rpt;
    Line 55: crv_completo.DataBind();

    No sé que hacer yo de verdad necesito poder exportar esos reportes a pdf.

    Gracias. ;(

  19. Hola José, excelente tu artículo pero tengo un problema al exportar a .pdf ya que me exporta el reporte pero en algunas filas sale el texto cortado.
    Tienes alguna idea de como solucionar ese gran inconveniente?

    Gracia por tu ayuda.

  20. Hola Rodrigo
    (es dificil darte una solucion sin ver algo.. pero lo intentaremos)

    Cuando insertas un campo en el reporte, puedes ir las propiedades del objeto (boton derecho) y tienes una propiedad que es “Can Grow” (Puede crecar) y es para que crezca el contenido verticalmente, puedes ingresar el limite de filas (pero si colocas 0 este limite no existe y crece hasta visualice todo el contenido)

    Espero que te sirva de ayuda o guia

  21. Gracias por tu rápida respuesta, como mis reportes presentan muchos datos numericos y alfabeticos y los datos alfabeticos son muy grandes yo le puse el can grow check=true pero no especifique el limite en el campo de texto que se ve ahi, es decir lo deje por el valor default que es cero. Asi los textos largos se ajustan de acuerdo al largo del casillero.
    Voy hacer lo que me aconsejas y darle valores al limite de caracteres a presentarse horizontalmente para ver que pasa.

    Gracias amigo.

  22. Me parecio muy bueno este pequeño pero explicita manual, me ayudo de mucho para un proyecto que tenia.
    Queria hacerte una consulta… quiero exportar varios reportes a excel, pero no a distintos archivos xls sino a un mismo archivo pero con distintas hojas (sheets de excel), sabes alguna manera de hacerlo. Gracias.

  23. Hola Javier… interesante pregunta, solo que para tener un mayor control sobre el render de excel tendrias que ver otra alternativa a un CR, a componentes de terceros, o dale una mirada al reciente SDK de OPEN XML donde podras manipular estos archivos.

  24. Si ya habia visto algo con Open XML, pero me parece que solo funcionaria para office 2007 y yo estoy con 2003, al parecer tendre que buscar otra forma.
    Gracias.

  25. Una pregunta estoy usando tu codigo pero me marca el siguiente error

    CrystalDecisions.CrystalReports.Engine.ParameterFieldCurrentValueException was unhandled by user code
    Message=”Missing parameter values.”
    Source=”CrystalDecisions.ReportAppServer.DataSetConversion”
    StackTrace:

    El reporte tiene parametros pero no se como pasarselos a la hora de exportar me pantalla ya me sale pero no a la hora de exportar.

    Gracias

  26. Hola Armando
    Lee detenidamente los comentarios de este post, que por ejemplo también hay una clase que te ayuda en la creación del reporte (junto con los paramentros)

  27. hola, nose si me puedes ayudar, estoy trabajando con vs2005 c#. y hasta aqui todo esta bien:
    CrystalReportSource1.ReportDocument.SetDataSource(tb);
    tb esta con todos los datos de las tablas que voy a desplegar en el reporte. Pero cuando voy a exportarlo:

    CrystalReportSource1.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat,Response,false,””);
    en el cliente despliega el reporte en pdf pero sin datos.
    Agradesco tu respuesta..

  28. Hola NyselT

    Para VB6 yo utilizaba (y en algunos proyectos legacy aun utilizo) CR8
    Alli no era posible (si mal no recuerdo)exportar a PDF… pero si recien en la version CR8.5
    Cual versión de CR8 estas utilizando??

    Pero si quieres exportar desde VB6 mira:
    Pero una vez encontre esta libreria en VB6 para generar PDF
    http://www40.brinkster.com/oPdf/default.asp?IdS=1

    Espero que te sirva de ayuda o guia.

  29. Alguien sabe si es posible exportar un reporte a PDF con contraseña o mejor aun, exportar a PDF con alguna propiedad que solo permita visualizar el reporte y no poder imprimir?

  30. al ejecutar la exportacion me sale el siguiente error:el codigo de usuario no encontro invalidArgumentException, le agradeceria la ayuda

    Protected Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim oRptPrueba As PRUEBA22 ‘rptPrueba

    Dim oArchivoDestino As DiskFileDestinationOptions

    If Me.ddlTipos.Text.Length = 0 Then
    MsgBox(“Seleccionar un formato para exportar”)

    Exit Sub
    End If
    If Me.TextBox1.Text.Length = 0 Then
    MsgBox(“Escribir nombre de archivo para exportar”)
    Exit Sub
    End If

    oArchivoDestino = New DiskFileDestinationOptions()
    oRptPrueba = New PRUEBA22()

    oRptPrueba.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile

    Select Case Me.ddlTipos.Text
    Case “PDF”
    oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat
    oArchivoDestino.DiskFileName = Me.TextBox1.Text & “.PDF”
    Case “Excel”
    oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.Excel
    oArchivoDestino.DiskFileName = Me.TextBox1.Text & “.XLS”
    Case “Word”
    oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.WordForWindows
    oArchivoDestino.DiskFileName = Me.TextBox1.Text & “.DOC”
    Case “RTF”
    oRptPrueba.ExportOptions.ExportFormatType = ExportFormatType.RichText
    oArchivoDestino.DiskFileName = Me.TextBox1.Text & “.RTF”

    End Select

    oRptPrueba.ExportOptions.DestinationOptions = oArchivoDestino

    oRptPrueba.Export()
    MsgBox(“Informe exportado a ” & Me.ddlTipos.Text)
    End Sub

  31. Hola que tal, bueno espero puedan darme alguna ayuda el tema es estoy trabajando con ASP.net c# (visual studio 2008) y genero un reporte de factras con crystalviewer1 el tema es el siguiente debemos enviar una parte de esas facturas electrónicamente por lo que debo primero exportarlas a pdf pero con Fuentes EMBEBIDAS que son necesarias si o si para la generación del código de barras de la misma a través del cual el cliente paga en bancos y otros medios por lo que esa fuente está licenciada y no la puedo cambiar y con el metodo ExportFormatType.PortableDocFormat no me toma las fuentes embebidas entonces necesito algun componente que me permita hacer esto “por código” no con interface sino que se hace transparente al usuario es decir se seleccionan el bloque de facturas se exporta cada una a pdf y se almacenan en el servidor o localmente luego por otro lado hace el envio de esos archivos. si alguien sabe algo de esto o que componente usar agradezco cualquier ayuda que me puedan dar muchas gracias

  32. Hola Paola
    Nunca tuve la oportunidad de necesitar incrustar fuentes (embeberlas en el pdf) en CR, pero creo si es para Codigo de barras, en CR2008 ya viene esas fuentes embebidas para utilizarlas. Mira:
    http://www.businessobjects.com/pdf/product/catalog/crystalreports/cr_2008_whats_new.pdf

    Si no estas utilizando CR2008… Tendrias que ver otras formas de generar tus reportes
    (tengo un post en borrador hace un tiempo sobre generacion de pdf)

    TE dejo algunos enlaces para que investigues sobre esto:

    – iTextSharp
    http://itextsharp.sourceforge.net/
    Descarga:
    http://sourceforge.net/projects/itextsharp/
    Tutorial
    http://itextsharp.sourceforge.net/tutorial/index.html
    Ejemplo
    http://www.elguille.info/colabora/NET2005/Percynet_Funcionalidad_itextsharp_con_csharp.htm
    – iText.NET
    Free PDF Library for .NET Framework
    http://www.ujihara.jp/iTextdotNET/en/
    Ejemplos de codigo en VB.NET con iText.NET
    http://www.ujihara.jp/iTextdotNET/en/examplesvb.html
    – Report.NET
    http://report.sourceforge.net/
    – SharpPDF
    http://sharppdf.sourceforge.net/
    Tutorial
    http://sharppdf.sourceforge.net/Tutorials.html

    Espero que te pueda servir, y tambien espero poder postear algo al respecto cuando tengo un tiempo 🙂
    Saludos

  33. por favor alguien me puede ayudar como puedo hacer la exportacion de un proyecto web c#.net a pdf o excel y tambien si alguien sabe como mandar imprimir un repeater ya que este muestra un repeater demaciado extenso quiero decir que tiene varias columnas que dicen…
    auxilio me urenge las 2 cosas la exportacion a excel y la impresion

  34. un favor quiza para ustedes es algo muy sencillo pero yo ya llevo las horas y no le encuentro el porque. mi detalle es que cuando exporto el reporte a pdf me sale la ventanita que me dice cuantas copias y si deseas imprimir todo pero despues de eso no me aparece la ventana de guardar como. asi que no se donde se guarda y el nombre que tiene, lo que quiero es que aparesca la ventanita.
    esto no pasa en todas las maquinas solo en unas..
    ojala me puedan ayudar, de antemano les mando un cordial saludo.

  35. [Para Veroali]
    Tendrias que mirar los componentes que menciono un comentario mas arriba del tuyo, para poder armar tuy propio PDF, Con respecto a Excel, puedes utilizar la famosa tecnica de armar una tabla HTML y cambiar el content-type

    [Para elfaro]
    Es dificil ayudar sin ver el problema. Es el mismo sistema operativo? el mismo navegador?
    Puedes encontrar ayuda mas “rapida” que aqui por los newsgroup de ASP.NET
    http://groups.google.com.ar/group/microsoft.public.es.dotnet.aspnet/topics?hl=es
    o desde los foros de MSDN:
    http://forums.microsoft.com/MSDN-ES/ShowForum.aspx?ForumID=309&SiteID=11

    Espero que te sirva de ayuda o guia

  36. Buenos Dias

    Desde una pagina aspx exporto 5 reportes a word (No hay problema). Pero luego el usuario selecciona uno de los 5 reportes y lo debe imprimir en una impresora que se pasa por parametro…. Como puedo hacer esto lo estoy haciendo con interop.word para abrir el word en la pagina aspx y luego imprimir pero no me hace nada…. No abre el word ni nada en el servidor…. La pagina se queda haciendo nada…. Ya revise permisos en el IIS…. que puedo hacer…. El desarrollo es web y esta con visual studio 2008.

    Gracias de antemano.

  37. Es muy bueno tu articulo,me voy a tomar la libertad de hacerte una consulta. Tengo el siguiente problema tengo un programa que entre muchas cosas que hace, genera informes en crystal report y estos se pueden exporta a varios formatos, pero cuando instalo el programa en algunos equipos no me funciona el boton de exportar de crystal (el icono de un sobre), he probado instalando cuanto dll y ocx he encontrado, pero no me permite exporta, no me envia un error, sino que no aparece el cuadro de dialogo Exportar… si me puedes ayudar te lo agradeceria

  38. trabajo con visual basic 6 y crystal 8 tengo problemas con el boton de exportar saca todos los cuadros pero el archivo que genera lo deja en blanco ya sea excel o otro formato

  39. Hola necesito exporta d crystal a excel pero a una hoja espicifica de mi libro no se como hace esto me pueden ayudar
    estoy usando el viewer 10 y vb.net

  40. Hola kradle
    En winform tambien puedes realizar esta tarea.

    ———————-
    Hola Eli27
    Puedes enviar datos a una hoja de excel de varias maneras, te dejo enlaces que te pueden ayudar
    – Transferir los datos a un archivo de texto delimitado por comas o tabuladores que Excel puede analizar después en las celdas de una hoja de cálculo.
    – Transferir los datos a una hoja de cálculo con ADO.NET.
    – Transferir los datos XML a Excel (versiones 2002 y 2003) para proporcionar datos que tengan formato y estén organizados en filas y columnas.
    mas info
    – Cómo transferir datos a un libro de Excel utilizando Visual C# 2005 o Visual C# .NET
    http://support.microsoft.com/default.aspx/kb/306023

    Haciendo referencia a Microsoft.Office.Core
    – Exportar datos a Excel (Javier Conesa y Carmen Hernández)
    http://www.moreplus.es/index.aspx?accion=articulo&id=122
    o tambien
    – Pasar Datagrid a Excel
    http://groups.google.com.ar/group/microsoft.public.es.dotnet.aspnet/browse_thread/thread/301907187de7d109

  41. Hola que tal, tengo el siguiente problema al exportar un reporte de Seagate Crystal Reports producto 8.0.1.0 VErsion 8.0.0.37 a un Libro de Excel 2007, el campo de detalle me lo limita a cierto numero de caracteres, pero si edito la celda puedo seguir escribiendo mas caracteres de los exportados, me podria ayudar alguien a saber que propiedad tengo que modificar o que puedo hacer para que no limite la celda, el Crystal lo ejecuto desde un programa en Visual Basic 6.0 Saludos!!!

  42. Hola, excelente blog amigo, hice la prueba en VS 2008 y funciona muy bien, ahora lo que requiero hacer es lo siguiente, quiero que a partir de un boton cargar el reporte, exportar el archivo en pdf y guardarlo en una ruta del directorio, tanto el nombre del archivo como la ruta donde se guardan son creados desde codigo de manera automática, todo esto lo quiero pero que no sea visible para el usuario, espero alguien me pueda ayudar, saludos a todo.

  43. Hola,
    Tengo el siguiente problema.
    Desde el Crystal Reports genero un reporte basado en una consulta a la base de datos, una de esas columnas puede tener informacion muy larga. Si genero en reporte desde Crystal se visualiza bien el reporte. Si invoco el reporte desde un ASP, las filas con informacion larga se sobreescriben.

    Gracias por su ayuda

  44. Hice tal cual como pones en tu código, peor solo consigo el siguiente error:

    An exception of type ‘System.InvalidCastException’ occurred in App_Web_at7lzrev.dll but was not handled in user code

    Additional information: Unable to cast object of type ‘CrystalDecisions.ReportSource.NonHTTPCachedReportSource’ to type ‘CrystalDecisions.CrystalReports.Engine.ReportDocument’.

    Hay que configurar alguna otra propiedad al reporte???

  45. @Roberto

    Tendrias que ver el codigo, pero por lo que comentas debe ser algo del ReportSource.
    Como estas asignando?
    O mejor…cuando haces debug en que linea te da el error?

  46. Hoy hice otra prueba, y me di cuenta que el código funciona…siempre y cuando sea en una ventana anexa a la aplicación, si el reporte se abre en la misma página no hay caso.

    Al parecer el error se presenta porque no puedo cambiarle el header a la página en tienmpo de ejecución.

    ¿Existe alguna forma de arreglar esto?

  47. Al hacer un debug más acabado me encuentro con que el problema lo tiene al tratar de usar el objeto RESPONSE…¿tendra que ver con que esta en una masterpage?
    (si abro el reporte en otra ventana no hay problema)

  48. Hola, me sirvió mucho tu explicación, pero aún tengo un problema, no se si puedas ayudarme; resulta que puedo exportar el reporte a todos los formatos excepto a PortableDocFormat, sólo me aparece un recuadro con la barra de dezplazamiento bloqueada, no se tal vez tu sepas el por qué de esto.

  49. Lo corregí…el problema se daba, no por el código de exportación…sino porque en la página que lo llamaba tenía el reporte en un updatepanel AJAX…

  50. @Julio
    Si tu exportacion es a PDF, parece ser que es un problema de tu navegador? prueba con exportar a disco a ver si funciona

    @Roberto
    Gracias por compartir tu experiencia.
    No creo que se problema de compatibilidad con ASP.NET AJAX ya que tengo proyectos con ambas tecnologias

  51. saludos, tengo el mismo problema que Roberto, cuando se me ocurre poner la exportación en un boton dentro de un UpdatePanel el Response me marca error, he tenido casos com oeste don deel ajax no me admite el Response, no se si tendras alguna solucion o ejemplo de como lo usas cuando trabajas dentro de un updatepanel, me seria muy útil, gracias, saludos

  52. pues solo para recordarte del ejemplo que ibas a postear sobre mandar de crystal a pdf con un botón dentro de un update panel, saludos desde México y muchas gracias

  53. hola tengo una duda no me funciona bien
    mi programa me marca el siguiente error
    Referencia a objeto no establecida como instancia de un objeto. en la siguiente
    linea
    Línea 176: reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, “reporte”)
    me podrias deciar por favor como le puedo hacer
    Gracias!!!

  54. Hola @Nancy

    Debe ser por problemas de ExportFormatType?
    Tu escribiste esa linea o copiaste? Escribiste con intellisense el metodo ExportToHttpResponse y el tipo de formato de exportacion?

    Pero para ganar tiempo mira si importaste estos espacios de nombre:

    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.Shared

    (al principio del articulo comento para que se necesitan ambos)

  55. al tratar de exportar los datos desde un reporte cryhstal (4) a un archivo exel, me rechaza con el argumento 20540 “falta la dll de exportacion o no esta actualizada”

  56. Hola Miguel
    Hace cuanto no utilizo CR y mas aun la version 4… pero trataremos de ayudarte.
    Te comento que cuando programaba en VB6 con CR8 teníamos problemas en el deployment para las DLL del CR.

    – O haces tu instalación manualmente (de las DLL necesarias) copiar las dll en las carpetas correctas y algunas registrarlas
    – u obtienes el merge module de CR4 y lo metes dentro de tu instalador

    Como estas desplegando el CR en tus clientes?

    Mas ayuda puedes buscarla en la “ayuda online”
    Esto te puede ayudar:
    https://www.sdn.sap.com/irj/scn/advancedsearch?query=Crystal+report+20540
    Mas precisamente donde dice: “1209439 – Export Options Not appearing at runtime”

  57. Estoy haciendo una aplicacion que de unas facturas y las estoy generando en pdf, pero ahora se hace necesario crearle una clave para que el usuario las pueda visualizar. Me podrian ayudar es muy urgente

  58. Que tal! primero que nada, excelente artículo, tenia ciertas dudas y pude despejarlas, pero lo que no he podido hacer, es que el reporte se abra en una ventana del navegador nueva. Imagine que debería usar el “target _blank”, pero no se como implementarlo. Es bueno decir que uso UpdatePanel, por lo que el reponse.write o algo así no funciona. Gracias de antemano!

  59. Hola @Anib,no lo hice pero se me ocurre que si quieres que el reporte o la exportación se abra en otra ventana, tendrás que implementar una llamada a una pagina que contenga el mismo código (podrías compartirlo como UserControl). Es decir no puedes enviar el reporte a otra pagina, tampoco creo que quieras guardar en disco solamente para mostrarlo en otra pagina, solución entonces (la que te comente) armar un UC que presente el reporte y el mismo UC que exporte solo que cuando quieres exportar abres una nueva ventana a la cual envías los parametros necesarios para que el UC vuelva a consultar “sus datos”… se entiende?

  60. Muy bien! Gracias José, ya logramos abrir el PDF en otra ventana. Pero en enlace para PDFsharp sería un bonus para el reporte. Gracias por la ayuda. Excelente blog.

  61. @Anib, me alegro que te sirviera.
    Gracias por los halagos, uno siempre se pregunta si lo que uno escribe puede llegara ayudar a alguien mas, y con esto corroboro 🙂
    Saludos cordiales.

  62. Señores buenas tardes desde ya gracias por el foro y la ayuda, tengo problemas al exportar un reporte a PDF desde asp net 1.1.
    El reporte tiene un sub reporte estos si se visualizan pero a la hora querer exportar me sale el siguiente error, ojo que otros reportes si los exporta bien aqui todo el codigo:

    Private Sub Unidades_Rpt()
    Dim rptStream As New System.IO.MemoryStream
    Dim subreportName As String
    Dim subreportObject As SubreportObject
    Dim mysub As New Rpt_Rs_Unidades
    Dim rep As New ReportDocument
    Dim RepSub As New ReportDocument
    Dim reportPath As String = Server.MapPath(“Rpt_Unidades.rpt”)

    oCRConnectionInfo.DatabaseName = “CnComisiones”
    oCRConnectionInfo.ServerName = “192.168.1.7”
    oCRConnectionInfo.UserID = “xxxx”
    oCRConnectionInfo.Password = “0000000000”

    CrystalReportViewer1.ReportSource = Server.MapPath(“Rpt_Unidades.rpt”)

    rep.Load(Server.MapPath(“Rpt_Unidades.rpt”))
    rep.SetDatabaseLogon(“xxxx”, “0000000000”)
    rep.Load(reportPath)
    rep.SetParameterValue(“@Idcoordinador”, Session(“filtro_sup”))

    If TypeOf (rep.ReportDefinition.ReportObjects.Item(“Subreport1”)) Is SubreportObject Then
    subreportObject = rep.ReportDefinition.ReportObjects.Item(“Subreport1”)
    subreportName = subreportObject.SubreportName
    RepSub = rep.OpenSubreport(subreportName)
    End If
    rptStream = CType(Rpt_Unidades.ExportToStream(CInt(ddlTipos.SelectedValue)), System.IO.MemoryStream)

    End Sub

    Private Sub btnExportar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportar.Click
    Dim rptStream As New System.IO.MemoryStream
    If Session(“rpt1”) = 1 Then
    ElseIf Session(“rpt1”) = 2 Then
    rptStream = CType(Rpt_Personal.ExportToStream(CInt(ddlTipos.SelectedValue)), System.IO.MemoryStream)
    ElseIf Session(“rpt1”) = 3 Then
    Unidades_Rpt()
    ElseIf Session(“rpt1”) = 4 Then

    ElseIf Session(“rpt1”) = 5 Then

    End If
    ‘rptStream = CType(rptWebComisiones.ExportToStream(CInt(ddlTipos.SelectedValue)), System.IO.MemoryStream)
    ‘Limpiamos la memoria
    Response.Clear()
    Response.Buffer = True
    ‘Le indicamos el tipo de documento que vamos a exportar
    Response.ContentType = FormatoDocumento()
    ‘Automaticamente se descarga el archivo
    Response.AddHeader(“Content-Disposition”, “attachment;filename=” + Me.nombreReporte)
    ‘Se escribe el archivo
    Response.BinaryWrite(rptStream.ToArray())
    Response.End()
    End Sub

    Private Function FormatoDocumento() As String
    Dim tipo As String
    Select Case Integer.Parse(ddlTipos.SelectedValue)
    Case ExportFormatType.Excel
    tipo = “application/vnd.ms-excel”
    nombreReporte &= “.xls”
    Case ExportFormatType.RichText
    tipo = “application/rtf”
    nombreReporte &= “.rtf”
    Case ExportFormatType.WordForWindows
    tipo = “application/msword”
    nombreReporte &= “.doc”
    Case Else
    tipo = “application/pdf”
    nombreReporte &= “.pdf”
    End Select
    Return tipo
    End Function

  63. Me olvidaba aqui el error:

    Error de servidor en la aplicación ‘/WebComisiones’.
    ——————————————————————————–

    Falta el valor actual del campo de parámetro.
    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    Detalles de la excepción: CrystalDecisions.CrystalReports.Engine.ParameterFieldCurrentValueException: Falta el valor actual del campo de parámetro.

    Error de código fuente:

    Línea 140: RepSub = rep.OpenSubreport(subreportName)
    Línea 141: End If
    Línea 142: rptStream = CType(Rpt_Unidades.ExportToStream(CInt(ddlTipos.SelectedValue)), System.IO.MemoryStream)
    Línea 143:
    Línea 144: End Sub

    Archivo de origen: C:InetpubwwwrootWebComisionesRptPrincipal.aspx.vb Línea: 142

  64. Hola @jgavelan
    Gracias por dejar tu comentario, justamente esto no es un foro sino un simple post de mi blog, dude en publicar tu código extenso pero al final lo hice.
    Con respecto a tu problema, hace unos cuentos meses que no utilzo CR, pero el error de ParameterFieldCurrentValueException mas arriba en los comentarios podras ver que hay una clase que nos ayuda a crear reportes con CR, sin necesidad de estar escribiendo todo cada vez, dale una mirada. Es la clase que @Lisseth posteo en un comentario.
    Espero que con eso te pueda ayudar.

  65. Buenos dias,
    De hace algunos dias me estoy quebrando la cabeza con esto, haber si me pueden ayudar.

    En una pagina aspx, estoy creando una cotizacion, cuando pulso el boton de crear cotizacion, genero un reporte, pero este debe de aparecen en formato pdf.

    Al mandar llamar la pagina que contiene el control CrystalReportViewer1 se abre esta pagina y se abre otra mas que ya es el pdf en si , ¿alguna sugerencia?, desde ya, muchas gracias

  66. Hola, es muy bueno el reporte, pero no sabras de casualidad como abrir un archivo desde vb.net 2005 Word o de Excel, (como esos archivos son formatos se vueleven a reutilizar, el usuario llena el formato) y después lo exporte a pdf y se guarde la ruta en sql Server 2005.

  67. Hola, tengo el siguiente problema. Estoy utilizando c# con vs2005 y utilizo un rpt el cual exporto a pdf. El rpt tiene un campo que es un código de barras. Cuando lo ejecuto en local todo sale perfecto pero al colgar la aplicación en el iis el campo del código de barras sale sin la fuente correspondiente.
    He mirado las propiedades del pdf y en local aparece con la fuente pero en el servidor no la tiene.

    ¿Alguien puede ayudarme por favor? Me estoy volviendo loca y me urge. Muchas gracias

  68. Hola Luis

    El problema no es este?? de cantidad de trabajos simultaneos
    “The maximum report processing jobs limit configured by your system administrator has been reached”

    por defult es 75, asi que podria venir por ahi tu problema

    Mira si te sirve cambiar en el registry el valor PrintJobLimit
    Se encuentra aqui:
    HKEY_LOCAL_MACHINESOFTWARECRYSTAL DECISIONS10.0REPORT APPLICATION SERVERSERVERPrintJobLimit

    Mas info:
    http://geekswithblogs.net/technetbytes/archive/2007/07/17/114008.aspx

    Avísame si es este tu problema porque ni consigo ver la descripción de la excepción que envías

  69. Hola, tengo un problema, genero una exportación de a pdf de forma “artesanal”, es decir:

    MemoryStream rptStream = new MemoryStream();
    rptStream = rptMan.getReportStream(sPath, sID);
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = “application/pdf”;
    Response.AddHeader(“Content-disposition”, “attachment; filename=CartaRenuncia.pdf”);
    Response.BinaryWrite(rptStream.ToArray());
    Response.End();

    esto en mi local corre perfecto, el problema que al subirlo al server de desarrollo o de producción, el primer reporte que se genera se tarda demasiado, despues de este, cualquier otro que se genera no tarda nada, incluso si es el mismo reporte el que se genera por segunda vez.

    sabras a qeu se pueda deber el que se tarde al generar por primera vez?

    Gracias

  70. Muy bueno me ayudado mucho, se nota sabes bstante,asi es que espero me puedas ayudar.
    Te cuento: logre levantar el informe pero me manda el sgte. error

    “No es posible abrir un conjunto de filas. Detalles: Código de error ADO: 0x Origen: Microsoft OLE DB Provider for SQL Server Descripción: There is already an object named ‘##TEMP_TBL_LAB_RESULTADO_ANALISIS_101915’ in the database. Estado de SQL: 42S01 Error nativo: No es posible abrir un conjunto de filas. Error en el archivo C:DOCUME~1ADMINI~1CONFIG~1TempRpt_Informe_Asignacion_Lote {AE9934EB-4724-46E2-9470-FE730AB4E7FD}.rpt: Error al abrir el conjunto de filas”

    Lo necesito por favro ayudame..
    Desde ya muxas pero muxas gracias…

    Marlenne

  71. Hola Marlenne, tu error parece ser el origen de datos de tu reporte. Cada vez que aparece el error […]}.rpt: Error al abrir el conjunto de filas, reviso que el reporte esté actualizado contra el SP que lo genera y que el mismo no falle. Además, por la primera parte del error, observo que tu procedure crea una tabla temporal (##TEMP_TBL_LAB_RESULTADO_ANALISIS_101915) que ya existe. Para evitar este error, te sugiero que:
    1 antes de crear la tabla verifiques su existencia (por si el procedmiento se ejecuta de manera simultanea en mas de un equipo, por ej.);
    2- siempre al final del procedure en que se crea, la borres;
    3- no repitas el nombre de creacion en procedimientos distintos;
    4- no hagas una temporal ## si solo necesitas que sea visible de manera local al procedimiento (en su lugar utiliza del tipo #);
    5- por que no usar varaibles de tipo table;

    En fin, tu problema no está en el CR sino en el origen de datos.

    Espero que te sirva mi pequeño aporte.

    Saludos,
    Sergio

  72. Gente, alguien se topó con este error alguna vez?

    El tipo ‘CrystalDecisions.Shared.ParameterFields’ del ensamblado ‘CrystalDecisions.Shared, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304’ no está marcado como serializable.

    el problema surge cuando publico la aplicacion WEB en el server. En el entorno de desarrollo funciona bien.

    Además, el botón export del CR viewer pide los parámetros de export (formato, páginas, etc.) pero al momento de Aceptar, no efectiviza la acción y se limita a mostrar la misma página de impresion en la pantalla emergente que surge al presionar el boton de EXPORT. Todo muy raro.

    Toda ayuda es bienvenida.

    Saludos,
    Sergio

  73. Hola

    esta muy bien el tema y puede resultar muy util
    solo que tengo un detalle

    envia error missing parameters values y envio al objeto ReportDocument los parametros
    Reporte.SetParameterValue(“TasaInteresNum”, tasaInteresNumValue)

    no se a que se deba esto??
    alguna idea??
    gracias y saludos

  74. Muy buen post, pero tengo una duda…
    si manda el recuadro de abrir, guardar y cancelar, pero lo que quiero es que mande a imprimir diretamente como doc de word.

    ojala me puedan ayudar!!!

  75. oye sabi que no me funciona tu codigo me manda error en
    ReporteCargar() (aki)
    reporteDoc (aki).ExportToHttpResponse (ExportFormatType.PortableDocFormat, Response, True, “NombreArchivo”)

    es solo eso el codigo o es mas? porque en realidad no entiendo, si es una funcion donde ets ala funcion reporte cargar()

  76. se crea la clase ReporteGeneral.vb
    Imports Microsoft.VisualBasic
    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.Shared
    Imports CrystalDecisions.Web
    Imports System.IO
    Imports System.Data.SqlClient

    Public Class ReporteGeneral
    ‘ Parámetros de los Reportes
    Public Structure Parametro
    Public sNombre As String
    Public oValor As Object
    End Structure

    ‘************************************************************************************
    ‘ NOMBRE: iAsignarDatosConexion
    ‘ DESCRIPCION: Asignar datos de conexion a la bd para llenar el reporte se agrego static
    ‘************************************************************************************
    Public Shared Function iAsignarDatosConexion(ByVal rptReporte As ReportDocument) As Integer
    Dim iResultado As Integer
    Try

    If iResultado = 0 Then
    Dim cn As New SqlConnection(ConfigurationManager.ConnectionStrings(“Comerciales”).ToString)

    Dim ciConexion As ConnectionInfo = New ConnectionInfo()
    ciConexion.ServerName() = cn.DataSource
    ciConexion.DatabaseName() = cn.Database
    ciConexion.IntegratedSecurity() = True

    Dim liTabla As TableLogOnInfo = New TableLogOnInfo()
    liTabla.ConnectionInfo() = ciConexion

    Dim Tabla As Table
    For Each Tabla In rptReporte.Database.Tables
    Tabla.LogOnInfo.ConnectionInfo = ciConexion
    Tabla.ApplyLogOnInfo(liTabla)
    Next

    iResultado = 0
    End If
    Catch ex As Exception
    iResultado = -1
    End Try

    Return iResultado
    End Function
    ‘************************************************************************************
    ‘ NOMBRE: iAsignarValoresParametros
    ‘ PARAMETROS: dParametro <-- Nombre del Reporte ' aParametros <-- Definición de Parámetros ' DESCRIPCION: Llenar los parametros con los valores de la bd ' Se agrego el shared a la funcion '************************************************************************************ Private Shared Function iAsignarValoresParametros(ByVal dParametro As ParameterFieldDefinitions, ByVal aParametros() As Parametro) As Integer Dim iResultado As Integer Try Dim pValor As ParameterDiscreteValue = New ParameterDiscreteValue Dim cValor As ParameterValues = New ParameterValues Dim pParam As Parametro Dim intParamatro As Integer intParamatro = 0 For Each pParam In aParametros pValor.Value = pParam.oValor cValor.Add(pValor) 'dParametro(pParam.sNombre).ApplyCurrentValues(cValor) dParametro(intParamatro).ApplyCurrentValues(cValor) intParamatro = intParamatro + 1 Next iResultado = 0 Catch ex As Exception iResultado = -1 End Try Return iResultado End Function '************************************************************************************ ' NOMBRE: iMostrarReporte ' PARAMETROS: sNombreReporte <-- Nombre del Reporte ' ctTipoComando aParametros <-- Arreglo de Parámetros ' crvReporte <-- ' DESCRIPCION: Desplegar una ventana secundaria, hacer click en el botón imprimir ' se agrego el static '************************************************************************************ Public Shared Function iMostrarReporte(ByVal sNombreReporte As String, ByVal aParametros() As Parametro, ByRef dReporte As ReportDocument) As Integer Dim iResultado As Integer Try 'Dim dReporte As ReportDocument = New ReportDocument dReporte = New ReportDocument dReporte.Load(sNombreReporte) 'crvReporte.EnableViewState = False iResultado = iAsignarValoresParametros(dReporte.DataDefinition.ParameterFields, aParametros) If iResultado = 0 Then iResultado = iAsignarDatosConexion(dReporte) If iResultado = 0 Then 'crvReporte.ReportSource = dReporte iResultado = 0 End If End If Catch ex As Exception iResultado = -1 End Try Return iResultado End Function Public Function iMostrarReporte(ByVal sNombreReporte As String, ByVal crvReporte As CrystalReportViewer) As Integer Dim iResultado As Integer Try Dim dReporte As ReportDocument = New ReportDocument dReporte.Load(sNombreReporte) crvReporte.EnableViewState = False iResultado = iAsignarDatosConexion(dReporte) If iResultado = 0 Then crvReporte.ReportSource = dReporte iResultado = 0 End If Catch ex As Exception iResultado = -1 End Try Return iResultado End Function End Class en una pagina Reporte.aspx Imports ReporteGeneral Imports System.Web Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared Partial Class Reporte Inherits System.Web.UI.Page Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init Dim intResultado As Integer Dim aparametros(1) As Parametro Dim strCodTrabajador As String strCodTrabajador = Request.QueryString("strCodTrabajador") aparametros(0).sNombre = "@intComunicado" aparametros(0).oValor = Session("NumComunicado") aparametros(1).sNombre = "@strCodTrabajador" aparametros(1).oValor = strCodTrabajador Dim dreporte As ReportDocument intResultado = ReporteGeneral.iMostrarReporte(Server.MapPath("Comunicado.rpt"), aparametros, dreporte) If intResultado = 0 Then Response.Buffer = False Response.Clear() 'ClearContent, ClearHeaders dreporte.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "NombreArchivo") End If End Sub

  77. Alguién sabe porque Crystal Reports al exportar a PDF agrega una letra “i” junto a todas las “t” que se encuentren en minúsculas? Cómo se puede corregir este problema?

  78. Para evitar que salga la “i” junto a las “t” cambia el tipo de letra. Eso a me paso y cambiandole el tipo de letra se soluciono.

  79. tengo un problema con el crystal. Cuando genero cierta cantidad de reportes en crystal llega un punto en que me genera el siguiente error “Error: Load report failed.”, creo q es por que falta cerrar la conexion pero no se como hacerlo

  80. genera error despues de que genero cierta cantidad de reportes, creo q el error radica en q no cierra la conexion de crystal report pero no se como

    alguien me puede ayudar

  81. Hola muchachos, al parecer tienen mucha experiencia en el tema de Cristal, espero ustedes puedan ayudarme con un problemita, digo problemota…

    Resulta que necesito exportar un reporte en formato word, y que sea editable completamente, lo que quiero decir es que cuando ya tengo el reporte en el documento de word este no me permite modificarlo a gusto, se mueve todo si hago algo, pareciera que la informacion que muestra el documento, fuese como una imagen que va sobre el texto, si escribo algo en el documento esta escritura queda atras de de la iformacion del repote si presiono enter para saltar de linea no pasa nada solo a el texto que esta atras de la información, por favor si alguien tiene idea de como hacer que un reporte cristal sea totalmente editable como si fuese un documento normal de word le agredeciria muchisimo, ya no se que hacer y necesito una ayuda de como solucionarlo. Gracias yo utizo .net 2005

    =(

    Ayudaaa

  82. Ojala alguien me pueda ayudar… Estoy generando reportes con Crystal Reports dentro de VisualStudioNet 2008, desde el ambiente de desarrollo (o sea mi maquina) funcionan bien, ya que tengo privilegios de administrador, sin embargo cuando lo publico en el servidor de producción, me solicita la clave de acceso al servidor para poder visualizar el reporte. Segun he leido es porque esta escribiendo el temporal del pdf en C:windows/temp, y aparentemente no tiene permisos para hacerlo. Ya genere la carpeta c:temp y direccione las variables de ambiente a esa carpeta como algunos foros lo suguieren, le di permisos al administrador, al iis_iusrs, al aspnet usr, al usuarios net bussines objsct. Ya no se que más hacer. Alguien podrá ayudarme… Saludos

  83. Hola te consulto por lo sgt.
    yo genero varios reportes crystal reports, los cuales loe he escogido por medio de checks, pero quisiera generarlos en un solo archivo PDF, osea yo quiero que si escojo 35 reportes, el archivo PDF me salga con los 35 reportes en uno solo, un solo archivo con 35 hojas, aunque trato de hacer que los exporte con el ExportToHttpResponse, me sale un error crystalrReport,Engine,ReportDocument no contiene una definicion para ExportToHttpResponse,

  84. Estimado @sheccid65
    Interesante la propuesta de “unir PDF”. Nunca la hice pero si es interesante unir estos bytes de PDF en uno solo.
    Para esto no creo que vas a necesitar utilizar el método ExportToStream para obtener el stream y luego con el arreglo de byte[] de cada uno poder “unir los pdf”

    Mira la idea por aqui:
    http://stackoverflow.com/questions/6778721/merging-memory-streams-to-create-a-http-pdf-response-in-c-sharp

    PD: Otra alternativa seria poder descargar todo junto en un archivo .zip (algo de esto si lo hice)

    Avisame si te sirvio de ayuda o guia.

  85. Hola, gracias por tú ayuda
    Encontré un código en internet el cual me genera archivos pdf simultaneos, pero tengo unos inconvenientes
    1. No genera la selección que yo quiero, de hecho el me muestra toda la información que hay en la base de datos.
    2. Solo me muestra la cabecera en la primera página, en las sgts hojas las quita.
    3. cuando imprime lo hace en forma vertical, la quiero horizontal.

    En dettalle.
    Yo lo que quiero es hacer una impresión por lotes, el usuario escoge por medio de checksbox los reportes que quiere imprimir(esto es en una página web, por lo que he leido no puedo imprimir directamente en la impresora del cliente, así que por esa razón genero el pdf.
    pero deberían salir los reportes que escojo con el check)
    Código.
    protected void btnImprimir_Click(object sender, EventArgs e)
    {
    // int i = 1;
    foreach (GridViewRow row in GridView1.Rows)
    {
    bool isChecked = ((CheckBox)row.FindControl(“check1”)).Checked;

    if (isChecked)
    {
    // Response.Write(““);
    //lblOTH.Text = GridView1.Rows[0].Cells[1].ToString();
    lblOTH.Text = row.Cells[0].Text;
    Session[“criterio”] = “{OrdenesTrabajo.IdOrdenTrabajo}=” + lblOTH.Text;
    Session[“informe”] = “OrdenTrabajo.rpt”;

    //Response.Redirect(“mreporte.aspx”);
    this.orpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
    string strTemp = Session[“criterio”].ToString();
    strTemp = strTemp.Replace(“=0”, “=false”);
    strTemp = strTemp.Replace(“= 0”, “=false”);
    Session[“criterio”] = strTemp;
    string CaminoReporte;
    Database crDatabase;
    Tables crTables;
    TableLogOnInfo crTableLogOnInfo;
    ConnectionInfo crConnectionInfo;
    CaminoReporte = ConfigurationManager.AppSettings[“CaminoReportes”];
    //System.Drawing.Printing.PrinterSettings ImpresoraActual;

    if (Session[“informe”] == null)
    {
    lblError.Text = “Informe no existe”;
    return;
    }

    CaminoReporte += Session[“informe”].ToString();

    orpt.Load(@CaminoReporte);

    crConnectionInfo = new ConnectionInfo();
    crConnectionInfo.ServerName = ConfigurationManager.AppSettings[“Servidor”];
    crConnectionInfo.DatabaseName = ConfigurationManager.AppSettings[“Bd”];
    crConnectionInfo.UserID = ConfigurationManager.AppSettings[“Usuario”];
    crConnectionInfo.Password = ConfigurationManager.AppSettings[“Clave”];

    //Get the tables collection from the report object
    crDatabase = orpt.Database;
    crTables = crDatabase.Tables;

    Logon(orpt, ConfigurationManager.AppSettings[“Servidor”], ConfigurationManager.AppSettings[“Bd”], ConfigurationManager.AppSettings[“Usuario”], ConfigurationManager.AppSettings[“Clave”]);

    orpt.RecordSelectionFormula = Session[“criterio”].ToString();

    //Este es el código de internet
    ExportOptions exp = new ExportOptions();
    exp = orpt.ExportOptions;
    exp.ExportFormatType = ExportFormatType.PortableDocFormat;
    exp.FormatOptions = new PdfRtfWordFormatOptions();
    ExportRequestContext req = new ExportRequestContext();
    req.ExportInfo = exp;
    System.IO.Stream st;
    st = orpt.FormatEngine.ExportToStream(req);
    Response.ClearContent();
    Response.ClearHeaders();
    Response.ContentType = “application / pdf”;
    Response.AddHeader(“Content-Disposition”, “inline; filename=OrdenTrabajo.pdf”);
    Byte[] b = new byte[st.Length];
    st.Read(b, 0, (int)st.Length);
    Response.BinaryWrite(b);
    Response.Flush();
    Response.End();

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *