2009-06-02 11 views
5

¿Cómo puedo (en mi controlador) enviar un pdf que se abre en el navegador. Lo he intentado pero solo descarga el archivo (es decir, y Firefox) sin preguntar.Abrir pdf en el complemento del navegador

public ActionResult GetIt() 
{ 
    var filename = @"C:\path\to\pdf\test.pdf"; 
    // Edit start 
    ControllerContext.HttpContext.Response.AddHeader("Content-Disposition", String.Format("inline;filename=\"{0}\"", "test.pdf")); 
    // Edit stop 
    return File(filename, "application/pdf", Server.HtmlEncode(filename)); 
} 

Después de agregar la edición anterior, funciona como debería, gracias.

Respuesta

6

Debe establecer el encabezado HTTP de disposición del contenido en línea para indicarle al navegador que debe intentar utilizar un complemento de PDF si está disponible.

Algo así como: Content-Disposition: inline; filename = test.pdf

Tenga en cuenta que no puede forzar el uso del complemento, es una decisión tomada por el navegador.

1

Creo que esto depende de cómo maneja el cliente los archivos PDF. Si se ha configurado para permitir que Adobe Reader abra los archivos en el complemento del navegador, lo hará, pero tal vez lo haya configurado para descargar el archivo en lugar de abrirlo. En cualquier caso, no hay forma de controlar cómo se abrirán los archivos PDF en la máquina del usuario.

+0

No, mi cliente funciona como se espera en otros sitios web. A veces se descarga, a veces se abre en Adobe Plug-in. Probablemente tenga algo que ver con los encabezados enviados. – Nifle

+0

Sí, son los encabezados - vea los comentarios a continuación. –

2

Este (además de las otras cabeceras) hace el truco para mí en una llanura aplicación web .NET:

Response.AddHeader ("Content-Disposition", String.Format ("inline; filename =" "{0}" "", FileName))

No estoy familiarizado con MVC, pero espero que esto ayude.

+2

Creo que debe establecer la disposición en línea en lugar de en archivo adjunto. Usar el archivo adjunto lo fuerza a guardar el archivo en el disco. –

+0

Sí, lo siento, rápido en mi copia/pegar. Eso lo abriría en una nueva ventana, esto intentará abrirlo en la misma ventana: Response.AddHeader ("Content-Disposition", String.Format ("inline; filename =" "{0}" "", FileName)) – ScottE

Cuestiones relacionadas