none
Exportar crystal report a pdf RRS feed

  • Pregunta

  • Hola a todos

    Tengo una rutina para imprimir un reporte, mas especificamente un Dataset y lineas de codigo que funcionan a la perfección

    Ahora, el tema para exportar a Pdf sin visualizar el informe es lo que me ocupa hoy

    en un botón hago esto

    frmReporteMat.Show()
    frmReporteMat.Visible = False
    frmReporteMat.CrystalReportViewer1.ExportReport()

    Ahora 2 cosas

    Primero: con la primera linea, el informe primitivo carga y se visualiza por milesimas de segundos, y quisiera evitar esa situación. Si omito el show solo exporta el informe sin datos

    Segundo: con la tercera linea me aparece un cuadro dialogo con las opciones de exportar a diferentes formatos. Quisiera que aparezca si es posible solo la opción a Pdf.

     

    Espero me hayan comprendido

    Saludos

    Carlos

    martes, 6 de abril de 2010 13:30

Respuestas

  • Hola carlos,

    antes de ejecutar el código que te hemos dado, ejecuta este que indicas para que se carguen los datos en DSMat, justo debajo del da.Fill(DSMat, "Empresa") pon el código que te hemos dado para cargar el informe.

    Por supuesto, si el dataset está vacio, te mostrará el informe sin datos, porlo que si ejecutas este código que indicas antes de crear el ReportDocument, te saldrán los datos.

    Un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    Blog
    • Marcado como respuesta carlosanpy martes, 6 de abril de 2010 17:35
    martes, 6 de abril de 2010 17:06
    Moderador

Todas las respuestas

  • Para el punto 2 prueba esto:

    frmReporteMat.CrystalReportViewer1.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, rutaPDF) 

    Donde rutaPDF será el fichero de destino...

     

    y para la primera parte para evitar que el formulario aparezca maximizado prueba con esto:

    frmReporteMat.WindowState=FormWindowState.Minimized 

    frmReporteMat.Show()
    frmReporteMat.Visible = False
    frmReporteMat.CrystalReportViewer1.ExportReport()


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    martes, 6 de abril de 2010 13:57
    Moderador
  • Hola!

    Puedes usar el ReportDocument para generar el pdf en memoria de forma automática sin usar el reportviewer!

    Incluye en tu proyecto una referencia al ensamblado: CrystalDecisions.CrystalReports.Engine y prueba este código:

        Dim rd As New CrystalDecisions.CrystalReports.Engine.ReportDocument
        rd.Load("c:\rutadelrpt\informe.rpt")
        rd.SetDataSource(DataSetDatosInformes)
    
        Dim oStrem As New System.IO.MemoryStream
        oStrem = CType(rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat), System.IO.MemoryStream)
    
        'Si lo deseamos escribimos el pdf a disco.
        Dim ArchivoPDF As New System.IO.FileStream("c:\po.pdf", IO.FileMode.Create)
        ArchivoPDF.Write(oStrem.ToArray, 0, oStrem.ToArray.Length)
        ArchivoPDF.Flush()

    Con este código, solo pasando el dataset con los datos al report document podrás obtener una memorystream con el pdf y grabarlo a disco si lo deseas.

    Espero que te sirva, un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    Blog
    martes, 6 de abril de 2010 14:04
    Moderador
  • ok gracias creo que va funcionar,

    para el primer punto solucionado

    para el segundo creo que le falta una libreria ya que la excepcion dice 'ExportToDisk no es un miembro de CrystalDesicions.Windows.Forms.CrystalReportViewer'

     

    Gracias

    Carlos

    martes, 6 de abril de 2010 14:06
  • Cierto,

     

    Para eso tienes que usar la solucion de Josue....

    Fallo tecnico.

    PD: aunque no es necesario qu declares el Stream...


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    martes, 6 de abril de 2010 14:09
    Moderador
  • Al dataset lo llamo DsMat

    en esta linea seria así

    rd.SetDataSource (DsMat)?

     

    Carlos

    martes, 6 de abril de 2010 14:20
  • Hola carlosanpy

    Si asi sería

    Un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    Blog
    martes, 6 de abril de 2010 14:23
    Moderador
  • pero explica la excepcion que DsMat es un tipo y no puede usarse como expresion

     

    martes, 6 de abril de 2010 14:25
  • Hola!

    a SetDataSource tienes que pasarle como parámetro una variable con una instancia del dataset tipado en el que tienes los datos que quieres mandarle al informe, te lanza esa excepción porque DsMat es el nombre del dataset tipado, en tu código crearas una variable de tipo DsMat que llenas con datos de una consulta... esa variable es la que tienes que pasar a SetDataSource

    Un saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    Blog
    martes, 6 de abril de 2010 14:39
    Moderador
  • ok Jose

    ASi esta corriendo pero se tranca en la ultima linea

    Dim midataSet As New DSMat
    Dim rd As New CrystalDecisions.CrystalReports.Engine.ReportDocument
    rd.Load(Application.StartupPath & "\" & "CrystalReport1.rpt")
    rd.SetDataSource(midataSet)
    Dim oStrem As New System.IO.MemoryStream
    oStrem = CType(rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat), System.IO.MemoryStream)

    el rd.Load se refiere al lugar fisico que ocupa el objeto crystal report No?

    en el codigo en negrita especifica que no es posible encontrar o no se puede conectar y da una ruta diferente al declarado en el rd.load ej C:documn.....temp/crystalreport1

     

    Carlos

    martes, 6 de abril de 2010 14:51
  • Hola carlos tal como te comente no es necesario que hagas lo del Stream:

     

    con tu codigo mira esto:

    Dim midataSet As New DSMat
    Dim rd As New CrystalDecisions.CrystalReports.Engine.ReportDocument
    rd.Load(Application.StartupPath & "\" & "CrystalReport1.rpt")
    rd.SetDataSource(midataSet)
    rd.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, rutaPDF)


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    martes, 6 de abril de 2010 14:52
    Moderador
  • Hola!

    Si el Load es el lugar fisico donde se encuentra el archivo rpt.

    es posible que application.startupPath en debug esté cogiendo la ruta donde visual studio está ejecutando la aplicación (que no es la misma donde físicamente está.),

    prueba a poner un breakpoint en rd.load y mirar que ruta está devolviendo Application.StartupPath

    También puedes probar, simplemente por descartar cosas, a indicar la ruta correcta a mano en el rd.Load, rd.Load("c:\dirdetuaplicacion\crystalreport1.rpt")

    Un saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    Blog
    martes, 6 de abril de 2010 14:55
    Moderador
  • jtorrecilla

    disculpa que sea un poco hincha pero en tu ultima linea da el mismo error

    no es posible la conexion

    CArlos

    martes, 6 de abril de 2010 14:59
  • Imagino que tendrás el rpt en tu solucion, revisa la propiedad "Copiar al directorio de Resultados" que esta establecida a Siempre o Si es nuevo....

     


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    martes, 6 de abril de 2010 15:04
    Moderador
  • Hola Carlos

    Has probado a especificar la ruta completa manualmente en el Load?

    Un saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    Blog
    martes, 6 de abril de 2010 15:14
    Moderador
  • si era eso,

    pero solo imprime el imforme en blanco, sin datos

    Veran, al inicio del hilo especifique un dataset y codigos

    El dataset contiene dos datatable y las lineas de codigo van cargando al rpt

    algo asi...

    Dim DSMat As New DSMat()
    Using dbEmpresa As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=Admin;Data Source=" & Application.StartupPath & "\" & "Empresa.emp")
    Dim sql As String = "SELECT Empresa " & _
      ",Direccion" & _
      ",Localidad" & _
      ",Telefono" & _
      ",Fax" & _
      " FROM Empresa"
    Dim command As New OleDbCommand(sql, dbEmpresa)
    Dim da As New OleDbDataAdapter(command)
    da.Fill(DSMat, "Empresa")

    El codigo que ustedes gentilmente me han enviado no recorre este codigo

    Saludos

    martes, 6 de abril de 2010 16:32
  • Hola carlos,

    antes de ejecutar el código que te hemos dado, ejecuta este que indicas para que se carguen los datos en DSMat, justo debajo del da.Fill(DSMat, "Empresa") pon el código que te hemos dado para cargar el informe.

    Por supuesto, si el dataset está vacio, te mostrará el informe sin datos, porlo que si ejecutas este código que indicas antes de crear el ReportDocument, te saldrán los datos.

    Un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    Blog
    • Marcado como respuesta carlosanpy martes, 6 de abril de 2010 17:35
    martes, 6 de abril de 2010 17:06
    Moderador
  • Funciona!

    Maestro mil gracias por la ayuda y también por la pasiencia

    Saludos

    Carlos

    martes, 6 de abril de 2010 17:25
  • De nada, recuerda marcar las respuestas correctas, así cualquier otro usuario del foro con el mismo problema sabra cual fue la solución que te funciono y podra aplicarla. Tambien puedes votar las respuestas que te hayan sido útiles.

    Un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    Blog
    martes, 6 de abril de 2010 17:28
    Moderador
  • Funciona!!

    Amigo muchas gracias por la ayuda y también por la paciencia

    Saludos

     

    Carlos

     

    martes, 6 de abril de 2010 17:35
  • amigo a mi sale  el siguiente error, "The Report Application Server failed" y ya lo intente  con varios codigos y me  sigue marcando lo mismo,

    podrian  ayudarme.

     

     

    muchas gracias.

    martes, 1 de febrero de 2011 23:23
  • Dim rpt1 As CrystalDecisions.CrystalReports.Engine.ReportDocument = New CrystalDecisions.CrystalReports.Engine.ReportDocument
    'Cargar tu reporte con dataset
    rpt1.SetDataSource(dsNotas)
    'generas un archivo .RPT
    rpt1.SaveAs(filename, True)
    'Opciones de Exportacion
            Dim DOptions As Global.CrystalDecisions.Shared.DiskFileDestinationOptions
            Dim EOptions As Global.CrystalDecisions.Shared.ExportOptions
            Dim PM As Global.CrystalDecisions.Shared.PageMargins
            Dim rpt As New Global.CrystalDecisions.CrystalReports.Engine.ReportDocument
    'NO ES OBLIGATORIO
               Dim MargenLeft As Integer = nombre.Split("-")(1)
                Dim MargenTop As Integer = nombre.Split("-")(2)
                Dim MargenRight As Integer = nombre.Split("-")(3)
                Dim MargenBottom As Integer = nombre.Split("-")(4)
    'Asignas nombre del RPT creado previamente.
    rpt.FileName = Fichero
    'CREAR PDF
              DOptions = CrystalDecisions.Shared.ExportOptions.CreateDiskFileDestinationOptions
                DOptions.DiskFileName = directorio & "\" & nombre & ".PDF"
                EOptions = New CrystalDecisions.Shared.ExportOptions
                EOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat
                EOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile
                EOptions.ExportFormatOptions = CrystalDecisions.Shared.ExportOptions.CreatePdfRtfWordFormatOptions
                EOptions.ExportDestinationOptions = DOptions
    rpt.Export(EOptions)

    jueves, 15 de noviembre de 2012 7:45
  • Este es mi código, la opcion de imprimir y vizualizar funcionan correctamente pero la funcion de exportar salta un mensaje de error que dice Faltan Valores de Parametro.

    Desde mi punto de vista, es imposible que falten parametros ya que los procedimientos de Imprimir y Visualizar funcionan correctamente.

    Estoy dando vueltas con esto desde hace 3 días y no le encuentro logica.

    Por favor Obi Wan Kenobi, eres nuestra unica esperanza, jajaja. Saludos.

        ''' <summary>
        ''' Imprimir.
        ''' </summary>
        Sub sbIpr()
            ' Ingresa los parámetros al CrystalReportViewer.
            crvIpr.ParameterFieldInfo = prmIpr
            ' Ingresa los datos del XML al CrystalReportDocument.
            crdIpr.SetDataSource(dsTmp)
            ' Genera el documento.
            crvIpr.ReportSource = crdIpr
    
            ' Solicita la impresión.
            crvIpr.PrintReport()
        End Sub
    
        ''' <summary>
        ''' Visualizar.
        ''' </summary>
        Sub sbVlz()
            Dim frmRpt As New Global.ipr.frmRpt
            frmRpt.MdiParent = _frm.MdiParent
            frmRpt.Show()
    
            ' Ingresa los parámetros al CrystalReportViewer.
            frmRpt.crvIpr.ParameterFieldInfo = prmIpr
            ' Ingresa los datos del XML al CrystalReportDocument.
            crdIpr.SetDataSource(dsTmp)
            ' Genera el documento.
            frmRpt.crvIpr.ReportSource = crdIpr
        End Sub
    
        ''' <summary>
        ''' Exportar.
        ''' </summary>
        ''' <param name="sNbrAch">Nombre del archivo.</param>
        ''' <param name="oMemAch">Archivo.</param>
        Sub sbExp(ByRef sNbrAch As String, _
                  ByRef oMemAch As System.IO.MemoryStream)
            sNbrAch = "prof-" & profScl & ".PDF"
    
            ' Ingresa los parámetros al CrystalReportViewer.
            crvIpr.ParameterFieldInfo = prmIpr
            ' Ingresa los datos del XML al CrystalReportDocument.
            crdIpr.SetDataSource(dsTmp)
            ' Genera el documento.
            crvIpr.ReportSource = crdIpr
    
            ' Genera el documento.
            Dim rdPdf As CrystalDecisions.CrystalReports.Engine.ReportDocument = crvIpr.ReportSource
    
            ' Obtiene: PDF.
            oMemAch = rdPdf.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)
        End Sub

    Proforma: Visualizar

    -- Atte. PPLONN



    • Editado PPLONN miércoles, 20 de marzo de 2013 22:47 Imagen Agregada
    miércoles, 20 de marzo de 2013 22:26