Les fichiers PDF ne s'ouvrent pas dans Internet Explorer avec Adobe Reader 10.0 – les utilisateurs obtiennent un écran gris vide. Comment puis-je réparer cela pour mes utilisateurs?

Il existe un problème connu avec l'ouverture d'un fichier PDF dans Internet Explorer (v 6, 7, 8, 9) avec Adobe Reader X (version 10.0. *). La fenêtre du navigateur se charge avec un écran gris vide (et n'a même pas de barre d'outils Reader). Il fonctionne parfaitement avec Firefox, Chrome ou avec Adobe Reader 10.1. *.

J'ai découvert plusieurs solutions de contournement. Par exemple, le fait de frapper "Actualiser" va charger le document correctement. Mise à niveau vers Adobe Reader 10.1. *, Ou dégradation vers 9. *, corrige le problème aussi.
Cependant, toutes ces solutions exigent de l'utilisateur de comprendre . La plupart de mes utilisateurs se font très confus en voyant cet écran gris, et finissent par blâmer le fichier PDF et en blâmant le site pour être brisé. Honnêtement, jusqu'à ce que j'ai étudié la question, j'ai également blâmé le PDF.

Donc, j'essaie de trouver un moyen de résoudre ce problème pour mes utilisateurs.
J'ai envisagé de fournir un lien "Télécharger PDF" (qui définit l'en Content-Disposition tête Content-Disposition à la attachment au lieu de en inline ), mais ma société n'aime pas cette solution, car nous voulons vraiment que ces fichiers PDF s'affichent dans le navigateur.

Est-ce que quelqu'un d'autre a rencontré ce problème?

Quelles sont les solutions possibles ou les solutions de rechange?

J'espère vraiment qu'une solution soit transparente pour l'utilisateur final , car je ne peux pas compter sur eux pour savoir comment modifier leurs paramètres Adobe Reader, ni pour installer automatiquement les mises à jour.

Voici l'écran gris redouté:
Modifier : la capture d'écran a été supprimée du serveur de fichiers! Pardon!
L'image était une fenêtre de navigateur, avec la barre d'outils régulière, mais un fond gris solide, aucune interface utilisateur quelconque.

Informations générales :
Bien que je ne pense pas que les informations suivantes sont liées à mon problème, je l'inclurai pour référence:
Il s'agit d'une application ASP.NET MVC, et jQuery est disponible.
Le lien vers le fichier PDF a une target=_blank afin qu'il s'ouvre dans une nouvelle fenêtre.
Le fichier PDF est généré à la volée et tous les en-têtes de contenu sont configurés de manière appropriée. L'URL NE comprend PAS l'extension .pdf , mais nous définissons l' content-disposition tête de content-disposition avec un nom de fichier .pdf valide et le paramètre en inline .

Modifier : Voici le code source que j'utilise pour diffuser les fichiers PDF.

Tout d'abord, l'action du contrôleur:

 public ActionResult ComplianceCertificate(int id){ byte[] pdfBytes = ComplianceBusiness.GetCertificate(id); return new PdfResult(pdfBytes, false, "Compliance Certificate {0}.pdf", id); } 

Et voici ActionResult ( PdfResult , hérite 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); } } 

Il y a 4 mois que j'ai posé cette question, et je n'ai toujours pas trouvé une bonne solution.
Cependant, j'ai trouvé une solution de rechange décente, que je partagerais au cas où d'autres auront le même problème.
Je vais essayer de mettre à jour cette réponse, aussi, si je fais d'autres progrès.

Tout d'abord, mes recherches ont montré qu'il existe plusieurs combinaisons possibles de paramètres utilisateur et de paramètres de site qui causent une variété de problèmes d'affichage PDF. Ceux-ci inclus:

  • Version cassée d'Adobe Reader (10.0. *)
  • Le site HTTPS avec Internet Explorer et le paramètre par défaut "Ne pas enregistrer les fichiers cryptés sur le disque"
  • Paramètre Adobe Reader – désactiver "Afficher les fichiers PDF dans mon navigateur"
  • Matériel lent (Merci @ahochhaus)

J'ai passé du temps à rechercher des options d'affichage PDF sur pdfobject.com , qui est une ressource EXCELLENTE et j'ai beaucoup appris.

La solution de contente avec laquelle je suis venu consiste à intégrer le fichier PDF dans une page HTML vide. C'est très simple: voir des exemples similaires sur pdfobject.com .

 <html> <head>...</head> <body> <object data="/pdf/sample.pdf" type="application/pdf" height="100%" width="100%"></object> </body> </html> 

Cependant, voici une liste des mises en garde:

  • Cela ignore toutes les préférences des utilisateurs pour les fichiers PDF – par exemple, j'aime personnellement que les fichiers PDF s'ouvrent dans un Adobe Reader autonome, mais cela est ignoré
  • Cela ne fonctionne pas si vous n'avez pas installé ou activé le plugin Adobe Reader, j'ai donc ajouté une section «Get Adobe Reader» au html et un lien pour télécharger le fichier, qui est habituellement complètement caché par <object /> Tag, … mais …
  • Dans Internet Explorer, si le plugin ne parvient pas à charger, l'objet vide cachera toujours la section "Get Adobe Reader", donc j'ai dû configurer l' z-index pour le montrer … mais …
  • Le visualiseur PDF intégré de Google Chrome affiche également la section «Obtenir Adobe Reader» au dessus du PDF, donc j'ai dû effectuer une détection de navigateur pour déterminer s'il faut afficher «Get Reader».

Il s'agit d'une énorme liste de mises en garde. Je crois qu'il couvre toutes les bases, mais je ne suis certainement pas à l'aise de l'appliquer à CHAQUE utilisateur (la plupart d'entre eux n'ont pas de problème).
Par conséquent, nous avons décidé de faire SEULEMENT cette option embedded si l'utilisateur l'accepte. Sur notre page PDF, nous avons une section qui dit "Avez-vous de la difficulté à voir les fichiers PDF?", Qui vous permet de modifier votre paramètre dans "intégré", et nous stockons ce paramètre dans un cookie.
Dans notre Action GetPDF , nous recherchons le cookie embed=true . Cela détermine si nous renvoyons le fichier PDF, ou si nous renvoyons une vue de HTML avec le PDF intégré.

Pouah. C'était encore moins amusant que d'écrire un JavaScript compatible IE6.
J'espère que d'autres avec le même problème peuvent trouver un confort en sachant qu'ils ne sont pas seuls!

Je n'ai pas de solution exacte, mais je publierai mes expériences avec ceci si elles aident quelqu'un d'autre.

À partir de mes tests, l'écran gris n'est déclenché que sur des machines plus lentes [1]. À ce jour, je n'ai pas réussi à le recréer sur le nouveau matériel [2]. Tous mes tests ont été dans IE8 avec Adobe Reader 10.1.2. Pour mes tests, j'ai désactivé SSL et supprimé tous les en-têtes qui auraient pu désactiver la mise en cache.

Pour recréer l'écran gris, j'ai suivi les étapes suivantes:

1) Naviguez vers une page qui relie un fichier PDF
2) Ouvrez le PDF dans une nouvelle fenêtre ou onglet (soit via le menu contextuel ou cible = "_ vide")
3) Dans mes tests, ce PDF s'ouvre sans erreur (mais j'ai reçu des rapports d'utilisateurs indiquant une défaillance sur la première charge PDF)
4) Fermez la fenêtre ou l'onglet nouvellement ouvert
5) Ouvrez le PDF (à nouveau) dans une nouvelle fenêtre ou onglet
6) Ce fichier PDF ne s'ouvre pas, mais ne montre que le «écran gris» mentionné par le premier utilisateur (tous les fichiers PDF ultérieurs chargés ne s'affichent pas – jusqu'à ce que toutes les fenêtres du navigateur soient fermées)

J'ai effectué le test ci-dessus avec plusieurs fichiers PDF différents (statiques et dynamiques) générés à partir de différentes sources et le problème de l'écran gris survient toujours lors des étapes ci-dessus (sur l'ordinateur «lent»).

Pour atténuer le problème dans ma demande, j'ai «déchiré» la page qui relie au PDF (pièces détachées pièce par pièce jusqu'à ce que l'écran gris ne se produise plus). Dans ma demande particulière (basée sur la fermeture-bibliothèque), supprimer toutes les références à goog.userAgent.adobeReader [3] semble avoir réparé le problème. Cette solution exacte ne fonctionnera pas avec jquery ou .net MVC mais peut-être que le processus peut vous aider à isoler la source du problème. Je n'ai pas encore pris le temps d'isoler quelle partie particulière de goog.userAgent.adobeReader déclenche le bug dans Adobe Reader, mais il est probable que jquery ait un code de détection de plugin similaire à celui utilisé dans la bibliothèque de fermeture.

[1] Machine ayant un écran gris:
Win Server '03 SP3
AMD Sempron 2400+ à 1,6 GHz
256 Mo de mémoire

[2] Machine n'ayant pas d'écran gris:
Win XP x64 SP2
AMD Athlon II X4 620 à 2,6 GHz
4 Go de mémoire

[3] http://closure-library.googlecode.com/svn/docs/closure_goog_useragent_adobereader.js.source.html

Hm, serait-il possible de faire ceci:

La première fois que votre utilisateur ouvre un pdf, en utilisant Javascript, vous créez un popout qui indique essentiellement "Si vous ne voyez pas votre document, cliquez ICI". Faites "ICI" un gros bouton où il expliquera à votre utilisateur quel est le problème. Créez également un autre bouton "tout va bien". Si l'utilisateur clique sur celui-ci, vous vous en souvenez, de sorte qu'il ne soit pas affiché à l'avenir.

J'essaie d'être pratique. Faire très longtemps essayer de résoudre ce type de problème «correctement» pour un petit sous-ensemble de versions d'Adobe Reader ne me paraît pas très productif.

J'ai rencontré ce problème autour du moment où MVC1 a été publié pour la première fois. Voir Génération de PDF, erreur avec IE et HTTPS concernant l'en-tête Cache-Control.

Pour Win7 Acrobat Pro X

Étant donné que j'ai fait tout cela sans revérifier pour voir si le problème existait encore, je ne suis pas sûr de savoir lequel de ces problèmes a réussi le problème, mais l'un d'entre eux l'a fait. En fait, après avoir fait le # 3 et le redémarrage, cela a parfaitement fonctionné.

FYI: Voici l'ordre dans lequel j'ai traversé la réparation.

  1. Accédez au Control Panel > options de dossiers sous chaque onglet General , View et Search cliquez sur le bouton Restore Defaults les Restore Defaults et sur le bouton Reset Folders

  2. Accédez à Internet Explorer , Tools > Options > Advanced > Reset (Je n'ai pas besoin de supprimer les paramètres personnels)

  3. Ouvrez Acrobat Pro X , sous Edit > Preferences > General .
    Au bas de la page, sélectionnez le Default PDF Handler . J'ai choisi Adobe Pro X , puis cliquez sur Apply .

Vous pourriez être invité à redémarrer (j'ai fait).

Meilleurs vœux

Dans mon cas, la solution était assez simple. J'ai ajouté cet en-tête et les navigateurs ont ouvert le fichier dans chaque test. En-tête ('Contenu-Disposition: pièce jointe; filename = "filename.pdf"');

J'ai eu ce problème. La réinstallation de la dernière version d'Adobe Reader n'a rien fait. Adobe Reader a travaillé sur Chrome mais pas dans IE. Cela a fonctionné pour moi …

1) Accédez au menu Outils IE -> Compatibilité.
2) Entrez un site Web contenant le PDF que vous souhaitez voir. Cliquez sur OK.
3) Redémarrez IE 4) Accédez au site Web que vous avez entré et sélectionnez le PDF. Il devrait venir.
5) Revenez à la vue Compatibilité et supprimez l'entrée que vous avez créée.
6) Adobe Reader fonctionne correctement maintenant dans IE sur tous les sites.

C'est une solution étrange, mais cela a fonctionné pour moi. Je devais passer par un écran d'acceptation d'Adobe après la réinstallation qui n'est apparu qu'après avoir fait l'astuce de Compatibility View. Une fois accepté, il semblait fonctionner partout. Des choses assez flocantes. J'espère que ça aide quelqu'un.

En expérimentant plus, la cause sous-jacente dans mon application (appelant goog.userAgent.adobeReader) accédait à Adobe Reader via ActiveXObject sur la page avec le lien vers le PDF. Ce cas de test minimal provoque l'écran gris pour moi (cependant, supprimer le ActiveXObject ne provoque pas d'écran 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> 

Je suis très intéressé si d'autres personnes peuvent reproduire le problème avec ce cas de test et en suivant les étapes de mon autre article («Je n'ai pas de solution exacte …») sur un ordinateur «lent».

Désolé de poster une nouvelle réponse, mais je ne pouvais pas comprendre comment ajouter un bloc de code dans un commentaire sur mon post précédent.

Pour un exemple vidéo de ce cas de test minimal, voir: http://youtu.be/IgEcxzM6Kck

Je me rends compte qu'il s'agit d'une publication plutôt tardive, mais encore une solution possible pour l'OP. J'utilise IE9 sur Win 7 et j'ai eu des problèmes d'écran gris d'Adobe Reader pendant plusieurs mois lorsque j'ai essayé d'ouvrir en ligne les déclarations bancaires et bancaires en ligne. Je pourrais ouvrir tout dans Firefox ou Opera mais pas IE. J'ai finalement essayé PDF-Viewer, le configurer comme le visualiseur pdf par défaut dans ses préférences et plus de problèmes. Je suis sûr qu'il existe d'autres téléspectateurs gratuits, comme Foxit, PDF-Xchange, etc., qui donneront de meilleurs résultats que Reader avec moins de maux de tête. Adobe est comme certaines des autres grandes entreprises qui développent des logiciels sur une prise ou laissent la base … alors je l'ai quitté.

Nous avons eu cette question même après avoir été mis à jour sur la dernière version de Adobe Reader.

Deux méthodes différentes ont résolu ce problème pour nous:

  • Utilisation de la version gratuite de l'application Foxit Reader au lieu de Adobe Reader
  • Mais, puisque la plupart de nos clients utilisent Adobe Reader, alors, au lieu d'obliger les utilisateurs à utiliser Foxit Reader, nous avons commencé à utiliser window.open(url) pour ouvrir le pdf au lieu de window.location.href = url . Adobe perdait le handle de fichier pour une raison quelconque dans différents iframes lorsque le pdf a été ouvert en utilisant la méthode window.location.href .