javascript - que - no puedo abrir pdf en internet explorer 11
Los archivos PDF no se abren en Internet Explorer con Adobe Reader 10.0: los usuarios obtienen una pantalla gris vacía. ¿Cómo puedo solucionar esto para mis usuarios? (10)
En mi caso, la solución fue bastante simple. Agregué este encabezado y los navegadores abrieron el archivo en cada prueba. encabezado (''Content-Disposition: attachment; filename = "filename.pdf"'');
Existe un problema conocido al abrir un PDF en Internet Explorer (v 6, 7, 8, 9) con Adobe Reader X (versión 10.0. *). La ventana del navegador se carga con una pantalla gris vacía (y ni siquiera tiene una barra de herramientas Reader). Funciona perfectamente bien con Firefox, Chrome o con Adobe Reader 10.1. *.
He descubierto varias soluciones. Por ejemplo, presionar "Actualizar" cargará el documento correctamente. La actualización a Adobe Reader 10.1. * O la degradación a 9. * también soluciona el problema.
Sin embargo, todas estas soluciones requieren que el usuario lo resuelva . La mayoría de mis usuarios se confunden mucho al ver esta pantalla gris, y terminan culpando al archivo PDF y culpando al sitio web por romperlo. Honestamente, hasta que investigué el problema, culpé también al PDF.
Por lo tanto, estoy tratando de encontrar una manera de solucionar este problema para mis usuarios.
Consideré proporcionar un enlace de "Descargar PDF" (que establece el encabezado Content-Disposition
para attachment
lugar de en inline
), pero a mi empresa no le gusta esa solución en absoluto, porque realmente queremos que estos archivos PDF se muestren en el navegador.
¿Alguien más ha tenido este problema?
¿Cuáles son algunas posibles soluciones o soluciones?
Realmente espero una solución que sea perfecta para el usuario final , porque no puedo confiar en que ellos sepan cómo cambiar su configuración de Adobe Reader o para instalar actualizaciones automáticamente.
Aquí está la temida Pantalla Gris:
Editar : ¡se eliminó la captura de pantalla del servidor de archivos! ¡Lo siento!
La imagen era una ventana del navegador, con la barra de herramientas normal, pero un fondo gris sólido, sin interfaz de usuario en absoluto.
Información de fondo :
Aunque no creo que la siguiente información esté relacionada con mi problema, la incluiré como referencia:
Esta es una aplicación ASP.NET MVC y tiene jQuery disponible.
El enlace al archivo PDF tiene target=_blank
para que se abra en una nueva ventana.
El archivo PDF se está generando sobre la marcha, y todos los encabezados de contenido se están configurando adecuadamente. La URL NO incluye la extensión .pdf
, pero configuramos el encabezado content-disposition
con un nombre de archivo .pdf
válido y la configuración en inline
.
Editar : Aquí está el código fuente que estoy usando para servir los archivos PDF.
Primero, la acción del controlador:
public ActionResult ComplianceCertificate(int id){
byte[] pdfBytes = ComplianceBusiness.GetCertificate(id);
return new PdfResult(pdfBytes, false, "Compliance Certificate {0}.pdf", id);
}
Y aquí está el ActionResult ( PdfResult
, hereda System.Web.Mvc.FileContentResult
):
using System.Net.Mime;
using System.Web.Mvc;
/// <summary>
/// Returns the proper Response Headers and "Content-Disposition" for a PDF file,
/// and allows you to specify the filename and whether it will be downloaded by the browser.
/// </summary>
public class PdfResult : FileContentResult
{
public ContentDisposition ContentDisposition { get; private set; }
/// <summary>
/// Returns a PDF FileResult.
/// </summary>
/// <param name="pdfFileContents">The data for the PDF file</param>
/// <param name="download">Determines if the file should be shown in the browser or downloaded as a file</param>
/// <param name="filename">The filename that will be shown if the file is downloaded or saved.</param>
/// <param name="filenameArgs">A list of arguments to be formatted into the filename.</param>
/// <returns></returns>
[JetBrains.Annotations.StringFormatMethod("filename")]
public PdfResult(byte[] pdfFileContents, bool download, string filename, params object[] filenameArgs)
: base(pdfFileContents, "application/pdf")
{
// Format the filename:
if (filenameArgs != null && filenameArgs.Length > 0)
{
filename = string.Format(filename, filenameArgs);
}
// Add the filename to the Content-Disposition
ContentDisposition = new ContentDisposition
{
Inline = !download,
FileName = filename,
Size = pdfFileContents.Length,
};
}
protected override void WriteFile(System.Web.HttpResponseBase response)
{
// Add the filename to the Content-Disposition
response.AddHeader("Content-Disposition", ContentDisposition.ToString());
base.WriteFile(response);
}
}
Estábamos recibiendo este problema incluso después de actualizar a la última versión de Adobe Reader.
Dos métodos diferentes resolvieron este problema para nosotros:
- Usar la versión gratuita de la aplicación Foxit Reader en lugar de Adobe Reader
- Pero, como la mayoría de nuestros clientes usan Adobe Reader, en lugar de requerir que los usuarios usen Foxit Reader, comenzamos a usar
window.open(url)
para abrir el pdf en lugar dewindow.location.href = url
. Adobe estaba perdiendo el control del archivo por algún motivo en iframes diferentes cuando se abrió el pdf utilizando el métodowindow.location.href
.
Experimentando más, la causa subyacente en mi aplicación (llamar a goog.userAgent.adobeReader) fue acceder a Adobe Reader a través de un ActiveXObject en la página con el enlace al PDF. Este caso de prueba mínimo causa la pantalla gris para mí (sin embargo, eliminar el ActiveXObject no causa ninguna pantalla gris).
<!DOCTYPE html>
<html lang="en">
<head>
<title>hi</title>
<meta charset="utf-8">
</head>
<body>
<script>
new ActiveXObject(''AcroPDF.PDF.1'');
</script>
<a target="_blank" href="http://partners.adobe.com/public/developer/en/xml/AdobeXMLFormsSamples.pdf">link</a>
</body>
</html>
Estoy muy interesado si otros pueden reproducir el problema con este caso de prueba y seguir los pasos de mi otra publicación ("No tengo una solución exacta ...") en una computadora "lenta".
Perdón por publicar una nueva respuesta, pero no pude encontrar la manera de agregar un bloque de código en un comentario de mi publicación anterior.
Para ver un ejemplo de video de este caso de prueba mínimo, consulte: http://youtu.be/IgEcxzM6Kck
Han pasado 4 meses desde que hice esta pregunta, y todavía no he encontrado una buena solución.
Sin embargo, encontré una solución decente, que compartiré en caso de que otros tengan el mismo problema.
Trataré de actualizar esta respuesta, también, si hago más progresos.
En primer lugar, mi investigación ha demostrado que hay varias combinaciones posibles de configuraciones de usuario y sitios que causan una variedad de problemas de visualización de PDF. Éstas incluyen:
- Versión rota de Adobe Reader (10.0. *)
- Sitio HTTPS con Internet Explorer y la configuración predeterminada "No guardar archivos cifrados en el disco"
- Configuración de Adobe Reader - desactivar "Mostrar archivos PDF en mi navegador"
- Hardware lento (gracias @ahochhaus)
Pasé un tiempo investigando las opciones de visualización de PDF en pdfobject.com , que es un excelente recurso y aprendí mucho.
La solución alternativa que se me ocurrió es incrustar el archivo PDF dentro de una página HTML vacía. Es muy simple: vea algunos ejemplos similares en pdfobject.com .
<html>
<head>...</head>
<body>
<object data="/pdf/sample.pdf" type="application/pdf" height="100%" width="100%"></object>
</body>
</html>
Sin embargo, aquí hay una lista de advertencias:
- Esto ignora todas las preferencias del usuario para archivos PDF; por ejemplo, personalmente me gusta que los PDF se abran en un Adobe Reader independiente, pero eso se ignora
- Esto no funciona si no tienes el complemento de Adobe Reader instalado / habilitado, así que agregué una sección "Obtener Adobe Reader" al html, y un enlace para descargar el archivo, que usualmente queda completamente oculto por el
<object />
etiqueta, ... pero ... - En Internet Explorer, si el complemento no se carga, el objeto vacío aún ocultará la sección "Obtener Adobe Reader", así que tuve que configurar el
z-index
para mostrarlo ... pero ... - El visor de PDF incorporado de Google Chrome también muestra la sección "Obtener Adobe Reader" en la parte superior del PDF, por lo que tuve que hacer la detección del navegador para determinar si mostrar el "Obtener lector".
Esta es una gran lista de advertencias. Creo que cubre todas las bases, pero definitivamente no me siento cómodo aplicando esto a CADA usuario (la mayoría de los cuales no tienen problemas).
Por lo tanto, decidimos SOLAMENTE hacer esta opción embedded
si el usuario opta por ella. En nuestra página PDF, tenemos una sección que dice "¿Tiene problemas para ver archivos PDF?", Que le permite cambiar su configuración a "incrustada", y almacenamos esa configuración en una cookie.
En nuestra Acción GetPDF
, buscamos la cookie embed=true
. Esto determina si devolvemos el archivo PDF o si devolvemos una Vista de HTML con el PDF incrustado.
Ugh. Esto fue incluso menos divertido que escribir JavaScript compatible con IE6.
¡Espero que otros con el mismo problema puedan encontrar consuelo al saber que no están solos!
Hm, ¿sería posible simplemente hacer esto?
La primera vez que su usuario abre un pdf, utilizando Javascript usted hace una ventana emergente que básicamente dice "Si no puede ver su documento, haga clic AQUÍ". Haga "AQUÍ" un gran botón donde explicará a su usuario cuál es el problema. También haga otro botón "todo está bien". Si el usuario hace clic en este, lo recuerda, por lo que no se muestra en el futuro.
Estoy tratando de ser práctico. Hacer grandes esfuerzos para tratar de resolver este tipo de problema "adecuadamente" para un pequeño subconjunto de versiones de Adobe Reader no me parece muy productivo.
Me doy cuenta de que esta es una publicación bastante tardía, pero sigue siendo una posible solución para el OP. Utilizo IE9 en Win 7 y he estado teniendo problemas con la pantalla gris de Adobe Reader durante varios meses al intentar abrir en línea los extractos bancarios y de tarjetas de crédito en formato PDF. Podría abrir todo en Firefox u Opera pero no en IE. Finalmente probé PDF-Viewer, lo configuré como el visor de PDF predeterminado en sus preferencias y no hubo más problemas. Estoy seguro de que hay otros espectadores gratuitos, como Foxit, PDF-Xchange, etc., que darán mejores resultados que Reader con menos dolores de cabeza. Adobe es como algunas de las otras grandes compañías que desarrollan software en base a "tómalo o déjalo" ... así que lo dejé.
Me encontré con este problema en el momento en que MVC1 se lanzó por primera vez. Consulte Generación de PDF, error con IE y HTTPS con respecto al encabezado Cache-Control.
No tengo una solución exacta, pero publicaré mis experiencias con esto en caso de que ayuden a alguien más.
Desde mi prueba, la pantalla gris solo se activa en máquinas más lentas [1]. Hasta la fecha, no he podido recrearlo en un hardware más nuevo [2]. Todas mis pruebas han sido en IE8 con Adobe Reader 10.1.2. Para mis pruebas apagué SSL y eliminé todos los encabezados que podrían haber desactivado el almacenamiento en caché.
Para recrear la pantalla gris, seguí los siguientes pasos:
1) Navegue a una página que enlace a un PDF
2) Abra el PDF en una nueva ventana o pestaña (ya sea a través del menú contextual o target = "_ blank")
3) En mis pruebas, este PDF se abrirá sin errores (sin embargo, he recibido informes de usuarios que indican fallas en la primera carga de PDF)
4) Cierre la ventana o pestaña recién abierta
5) Abra el PDF (nuevamente) en una nueva ventana o pestaña
6) Este PDF no se abrirá, sino que solo mostrará la "pantalla gris" mencionada por el primer usuario (todos los PDF posteriores que estén cargados tampoco se mostrarán, hasta que se cierren todas las ventanas del navegador)
Realicé la prueba anterior con varios archivos PDF diferentes (tanto estáticos como dinámicos) generados a partir de diferentes fuentes y el problema de la pantalla gris siempre ocurre cuando se siguen los pasos anteriores (en la computadora "lenta").
Para mitigar el problema en mi aplicación, "rompí" la página que vincula al PDF (quité las piezas pieza por pieza hasta que ya no aparecía la pantalla gris). En mi aplicación particular (construida en la biblioteca de cierre), la eliminación de todas las referencias a goog.userAgent.adobeReader [3] parece haber solucionado el problema. Esta solución exacta no funcionará con jquery o .net MVC, pero tal vez el proceso puede ayudarlo a aislar el origen del problema. Todavía no me he tomado el tiempo para aislar qué porción particular de goog.userAgent.adobeReader desencadena el error en Adobe Reader, pero es probable que jquery tenga un código de detección de complemento similar al utilizado en la biblioteca de cierre.
[1] Máquina que experimenta pantalla gris:
Win Server ''03 SP3
AMD Sempron 2400+ a 1.6GHz
256 MB de memoria
[2] Máquina que no tiene pantalla gris:
Win XP x64 SP2
AMD Athlon II X4 620 a 2.6 GHz
4GB de memoria
[3] http://closure-library.googlecode.com/svn/docs/closure_goog_useragent_adobereader.js.source.html
Tuve este problema La reinstalación de la última versión de Adobe Reader no hizo nada. Adobe Reader funcionó en Chrome, pero no en IE. Esto funcionó para mí ...
1) Vaya a Herramientas de IE -> menú Vista de compatibilidad.
2) Ingrese a un sitio web que tenga el PDF que desea ver. Haga clic en Aceptar.
3) Reinicie IE 4) Vaya al sitio web que ingresó y seleccione el PDF. Debería venir.
5) Regrese a la Vista de compatibilidad y elimine la entrada que realizó.
6) Adobe Reader funciona bien ahora en IE en todos los sitios web.
Es una solución extraña, pero funcionó para mí. Necesitaba pasar por una pantalla de aceptación de Adobe después de la reinstalación que solo apareció después de que hice el truco de Vista de compatibilidad. Una vez aceptado, parecía funcionar en todas partes. Bastante escamosa cosas. Espero que esto ayude a alguien.
Para Win7 Acrobat Pro X
Ya que hice todo esto sin volver a verificar para ver si el problema aún existía después, no estoy seguro de cuál de estos realmente solucionó el problema, pero uno de ellos lo hizo. De hecho, después de hacer el # 3 y reiniciar, funcionó perfectamente.
FYI: A continuación se muestra el orden en el que realicé la reparación.
Vaya a
Control Panel
> opciones de carpetas debajo de cada una de las pestañasGeneral
,View
ySearch
haga clic en el botónRestore Defaults
y en el botónReset Folders
Vaya a
Internet Explorer
,Tools
>Options
>Advanced
>Reset
(no fue necesario que elimine la configuración personal)Abra
Acrobat Pro X
, enEdit
>Preferences
>General
.
En la parte inferior de la página, seleccioneDefault PDF Handler
. ElegíAdobe Pro X
y hago clic enApply
.
Se le puede pedir que reinicie (lo hice).
Los mejores deseos