2009-05-09 4 views
5

Mi aplicación inserta un archivo PDF en una ventana emergente (por ejemplo, sin menú/barra de herramientas) del navegador (en respuesta al usuario haciendo clic en un botón). Esto funciona para todos los navegadores, excepto para IE7. En IE7, todo lo que obtengo es una ventana en blanco.Extender un archivo PDF a IE desde un sitio ASP.NET 3.5

Aquí es el código del lado del servidor que empuja hacia fuera el PDF:

private void StreamPDFReport(string ReportPath, HttpContext context) 
{ 
    context.Response.Buffer = false; 
    context.Response.Clear(); 
    context.Response.ClearContent(); 
    context.Response.ClearHeaders();   

    // Set the appropriate ContentType. 
    context.Response.ContentType = "application/pdf"; 
    context.Response.AddHeader("Content-Disposition", "inline; filename=Report.pdf"); 
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);   

    // Write the file directly to the HTTP content output stream. 
    context.Response.WriteFile(ReportPath); 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
    //context.Response.End(); 
} 

En el lado del cliente, cuando el usuario presiona el botón, ocurre lo siguiente en el controlador onClick:

onclick = "window.open ('RptHandler.ashx? RptType = CaseInfo', 'Report', 'top = 10, left = 10, width = 1000, height = 750')

¿Me falta algo realmente básico? ¿Por qué? funciona en todos los navegadores pero no en IE?

Respuesta

4

Resulta que la siguiente declaración hace que IE para no mostrar el PDF:

context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
No

bien por qué.

+0

¿Se está ejecutando bajo HTTPS? – wweicker

+0

No, no es así. – AngryHacker

+0

Encontré un problema conocido en http://support.microsoft.com/kb/323308 –

3

Con IE7 descubrimos que necesitaba agregar un encabezado adicional 'content-length' al tamaño del PDF que envía. algo como:

Response.AddHeader ("contenido-longitud", {tamaño del pdf});

+0

Lo que dices es cierto, pero eso no es todo. – AngryHacker

2

Parece que context.Response.Cache.SetCacheability(HttpCacheability.NoCache); solo funcionará cuando se utiliza IIS7.

Lo cambié a context.Response.AddHeader("Cache-Control", "no-cache"); y parece funcionar con IE7 e IE8.

Cuestiones relacionadas