none
Abrir varios PDFs Crystal Report en ventanas Emergentes RRS feed

  • Pregunta

  • Trabajo con asp.net y C#, estoy tratando de generar 190 reportes y solo se me esta generando uno y al tratar de generar el siguiente, me sale el siguiente error "El servidor no puede anexar un encabezado después de enviar los encabezados HTTP."

    investigue y estos dos links  "http://www.forosdelweb.com/f78/abrir-varios-pdfs-652303/" y "https://social.msdn.microsoft.com/Forums/es-ES/25a90d2f-62e5-4f4b-abbe-3e23a38f475c/abrir-dos-o-mas-ventanas-emergentes?forum=netfxwebes"
    para solucionar el problema y no entiendo como se debe implementar en mi código.

    for (int i = 0; i <= ListaEmpleado.Length; i++)
    {
        Stream oStream = null;
        byte[] byteArray = null;
    
        if (!ListaEmpleado[i].Equals("*"))
        {
            TablaGeneral = _operacion.ObtenerDatosDesprendiblePagoDestajo(IdEmpresa, Periodo, CentroCosto, Ciudad, "*", ListaEmpleado[i].ToString());
        }
        TablaDetalleDEV = _operacion.ObtenerDetallesPagoDestajo(IdEmpresa, ListaEmpleado[i].ToString(), Periodo, "DEV");
        TablaDetalleDED = _operacion.ObtenerDetallesPagoDestajo(IdEmpresa, ListaEmpleado[i].ToString(), Periodo, "DED");
    
        reporte = new ReportDocument();
        reporte.Load(Server.MapPath("~/Reportes/Operaciones/" + nombreReporte + ".rpt"));
        reporte.SetDataSource(TablaGeneral);
        reporte.Subreports[0].SetDataSource(TablaDetalleDEV); 
        reporte.Subreports[1].SetDataSource(TablaDetalleDED);
    
        oStream = reporte.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
    
        byteArray = new byte[oStream.Length];
        oStream.Read(byteArray, 0, Convert.ToInt32(oStream.Length - 1));
    
        string empleado = "";
    
        if (!ListaEmpleado[i].Equals("*"))
        {
            empleado = ListaEmpleado[i];
        }
    
        using (var mStream = (MemoryStream)reporte.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat))
        {
            Response.AddHeader("Content-Disposition", "attachment;FileName=" + RazSocial + " " + empleado + ".pdf");
            Response.Buffer = true;
            Response.ContentType = "application/pdf";
            Response.BinaryWrite(byteArray);
            Response.Flush();
            Response.Clear();
        }
    
        HttpContext.Current.ApplicationInstance.CompleteRequest();
        //Response.End();
    
        reporte.Dispose();
        reporte.Close();
        reporte = null;
    
        GC.Collect();
    }

    Muchas Gracias por la ayuda.
    si tienen link donde se explique mejor serán también de gran ayuda

    viernes, 31 de agosto de 2018 1:02

Respuestas

  • la solución que encuentro es:

    dedicada una pagina a solo abrir un archivo pdf con la función Abrir_PDF, para despues usar popup con window.open y llamarlo tantas veces, como archivos pdfs tenga.

    lo malo es que no se como se realiza ese proceso
    viernes, 31 de agosto de 2018 22:16
  • Hola Raficoma:

    Particularmente crearía un procedimiento para cada informe del Pdf o bien jugaría con variables.

    Te paso el esquema del procedimiento (adáptalo a tus necesidades), para exportar un pdf a una carpeta definida.

    De cualquier manera siempre abriría y cerraría cada exportación por tema de memoria.

    Dim Ruta As String = "Informes Exportados Financial\Informes PDF\Empresa" & VarGlobal.StrCodEmpresa & "\" & RutaExport & ".pdf" Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions() CrDiskFileDestinationOptions.DiskFileName = Ruta CrExportOptions = CrReport.ExportOptions With CrExportOptions .ExportDestinationType = ExportDestinationType.DiskFile .ExportFormatType = ExportFormatType.PortableDocFormat .DestinationOptions = CrDiskFileDestinationOptions .FormatOptions = CrFormatTypeOptions End With CrReport.Export() Label1.Text = "Informe Auditoría de los Fondos Propios exportado." & vbCrLf & "Ruta: Financial System\Informes Exportados Financial\Informes PDF " & vbCrLf & "'PDF'"

    CrReport.Close()
    CrExportOptions = Nothing

    La "rutaExport" la puede usar para meter el nombre que le darás al informe al guardarlo en la carpeta.

    Adáptalo y desde la llamada a tu informe le metes el procedimiento. 

    Un saludo.

    Gemma


    sábado, 1 de septiembre de 2018 18:48

Todas las respuestas

  • la solución que encuentro es:

    dedicada una pagina a solo abrir un archivo pdf con la función Abrir_PDF, para despues usar popup con window.open y llamarlo tantas veces, como archivos pdfs tenga.

    lo malo es que no se como se realiza ese proceso
    viernes, 31 de agosto de 2018 22:16
  • Hola Raficoma:

    Particularmente crearía un procedimiento para cada informe del Pdf o bien jugaría con variables.

    Te paso el esquema del procedimiento (adáptalo a tus necesidades), para exportar un pdf a una carpeta definida.

    De cualquier manera siempre abriría y cerraría cada exportación por tema de memoria.

    Dim Ruta As String = "Informes Exportados Financial\Informes PDF\Empresa" & VarGlobal.StrCodEmpresa & "\" & RutaExport & ".pdf" Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions() CrDiskFileDestinationOptions.DiskFileName = Ruta CrExportOptions = CrReport.ExportOptions With CrExportOptions .ExportDestinationType = ExportDestinationType.DiskFile .ExportFormatType = ExportFormatType.PortableDocFormat .DestinationOptions = CrDiskFileDestinationOptions .FormatOptions = CrFormatTypeOptions End With CrReport.Export() Label1.Text = "Informe Auditoría de los Fondos Propios exportado." & vbCrLf & "Ruta: Financial System\Informes Exportados Financial\Informes PDF " & vbCrLf & "'PDF'"

    CrReport.Close()
    CrExportOptions = Nothing

    La "rutaExport" la puede usar para meter el nombre que le darás al informe al guardarlo en la carpeta.

    Adáptalo y desde la llamada a tu informe le metes el procedimiento. 

    Un saludo.

    Gemma


    sábado, 1 de septiembre de 2018 18:48