it-swarm.com.de

PDF Dateien werden in Internet Explorer mit Adobe Reader 10.0 nicht geöffnet - Benutzer erhalten einen leeren grauen Bildschirm. Wie kann ich das für meine Benutzer beheben?

Es ist ein bekanntes Problem beim Öffnen eines PDF in Internet Explorer (Version 6, 7, 8, 9) mit Adobe Reader X (Version 10.0. *) Aufgetreten. Das Browserfenster wird mit einem leeren grauen Bildschirm geladen (und verfügt nicht einmal über eine Reader-Symbolleiste). Es funktioniert perfekt mit Firefox, Chrome oder Adobe Reader 10.1. *.

Ich habe mehrere Problemumgehungen entdeckt. Wenn Sie beispielsweise auf "Aktualisieren" klicken, wird das Dokument ordnungsgemäß geladen. Ein Upgrade auf Adobe Reader 10.1. * Oder ein Downgrade auf 9. * behebt das Problem ebenfalls.
Alle diese Lösungen erfordern jedoch den Benutzer, um dies herauszufinden. Die meisten meiner Benutzer sind sehr verwirrt, wenn sie diesen grauen Bildschirm sehen, und beschuldigen dann die PDF -Datei und die Website als fehlerhaft. Ehrlich gesagt, bis ich das Problem recherchiert habe, beschuldigte ich auch PDF!

Ich versuche also, einen Weg zu finden, um dieses Problem für meine Benutzer zu beheben.
Ich habe mir überlegt, einen Link "PDF herunterladen" bereitzustellen (der den Content-Disposition-Header auf attachment statt auf inline setzt), aber meine Firma mag diese Lösung überhaupt nicht, da wir diese PDF -Dateien wirklich wollen Anzeige im Browser. 

Hat jemand anderes dieses Problem erlebt?

Was sind mögliche Lösungen oder Problemumgehungen?

Ich hoffe wirklich auf eine Lösung, die nahtlos für den Endbenutzer ist , weil ich mich nicht darauf verlassen kann, dass sie wissen, wie sie ihre Adobe Reader-Einstellungen ändern oder Updates automatisch installieren.

Hier ist der gefürchtete Grey Screen:
Bearbeiten : Der Screenshot wurde vom Dateiserver gelöscht! Es tut uns leid!
Das Bild war ein Browserfenster mit der normalen Symbolleiste, aber mit einem durchgehenden grauen Hintergrund, ohne jegliche Benutzeroberfläche.

Hintergrundinformation :
Obwohl ich nicht glaube, dass die folgenden Informationen mit meinem Problem zusammenhängen, füge ich sie als Referenz hinzu:
Dies ist eine ASP.NET-MVC-Anwendung, für die jQuery verfügbar ist.
Der Link zur Datei PDF hat target=_blank, so dass er in einem neuen Fenster geöffnet wird.
Die PDF -Datei wird im laufenden Betrieb generiert und alle Inhaltsheader werden entsprechend gesetzt. Die URL enthält NICHT die Erweiterung .pdf, aber wir setzen den Header content-disposition mit einem gültigen Dateinamen .pdf und der Einstellung inline

Edit : Hier ist der Quellcode, den ich verwende, um die PDF -Dateien bereitzustellen. 

Zuerst die Controller-Aktion:

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

Und hier ist das ActionResult (PdfResult, erbt 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);
    }
}
30
Scott Rippey

Ich habe seit 4 Monaten diese Frage gestellt und ich habe immer noch keine gute Lösung gefunden.
Ich fand jedoch einen anständigen Workaround, den ich weitergeben werde, falls andere das gleiche Problem haben.
Ich werde versuchen, diese Antwort auch zu aktualisieren, wenn ich weitere Fortschritte mache.

Zunächst haben meine Untersuchungen gezeigt, dass es mehrere mögliche Kombinationen von Benutzereinstellungen und Websiteeinstellungen gibt, die eine Vielzahl von PDF Anzeigeproblemen verursachen. Diese schließen ein:

  • Defekte Version von Adobe Reader (10.0. *)
  • HTTPS-Site mit Internet Explorer und der Standardeinstellung "Keine verschlüsselten Dateien auf der Festplatte speichern"
  • Adobe Reader-Einstellung - Deaktivieren Sie "Anzeige PDF Dateien in meinem Browser".
  • Langsame Hardware (Danke @ahochhaus)

Ich habe einige Zeit recherchiert PDF Anzeigeoptionen unter pdfobject.com , einer exzellenten Ressource, und ich habe viel gelernt. 

Als Workaround habe ich die PDF Datei in eine leere HTML-Seite eingebettet. Es ist sehr einfach: Siehe ähnliche Beispiele auf pdfobject.com .

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

Hier ist jedoch eine Liste von Vorbehalten:

  • Dadurch werden alle Benutzereinstellungen für PDF-Dateien ignoriert. Ich persönlich mag es, dass PDF-Dateien in einem eigenständigen Adobe Reader geöffnet werden. Dies wird jedoch ignoriert
  • Dies funktioniert nicht, wenn Sie das Adobe Reader-Plugin nicht installiert/aktiviert haben. Daher habe ich der HTML-Datei einen Abschnitt "Get Adobe Reader" und einen Link zum Herunterladen der Datei hinzugefügt, der normalerweise durch das <object />-Tag ausgeblendet wird , ... aber ...
  • Wenn das Plugin in Internet Explorer nicht geladen wird, wird der Abschnitt "Get Adobe Reader" immer noch ausgeblendet, sodass ich den z-index einstellen musste, um es anzuzeigen ... aber ...
  • Der integrierte Google Chrome-Viewer PDF zeigt auch den Abschnitt "Get Adobe Reader" oberhalb von der PDF-Datei an, sodass ich eine Browsererkennung durchführen musste, um festzustellen, ob "Get Reader" angezeigt werden soll.

Dies ist eine riesige Liste von Vorbehalten. Ich glaube, dass es alle Grundlagen abdeckt, aber es ist mir definitiv unangenehm, dies auf JEDEN Benutzer anzuwenden (die meisten von ihnen haben kein Problem).
Daher entschieden wir uns NUR für diese embedded-Option, wenn der Benutzer dies wünscht. Auf unserer PDF Seite finden Sie einen Abschnitt mit der Meldung "Probleme beim Anzeigen von PDFs?", In dem Sie Ihre Einstellung in "eingebettet" ändern können. Diese Einstellung wird in einem Cookie gespeichert.
In unserer GetPDF-Aktion suchen wir nach dem embed=true-Cookie. Dies bestimmt, ob wir die PDF Datei zurückgeben oder ob wir eine HTML-Ansicht mit der eingebetteten PDF-Datei zurückgeben.

Pfui. Das machte sogar weniger Spaß als IE6-kompatibles JavaScript zu schreiben.
Ich hoffe, dass andere mit dem gleichen Problem Trost finden können, in dem Wissen, dass sie nicht alleine sind!

30
Scott Rippey

Ich habe keine exakte Lösung, aber ich werde meine Erfahrungen damit bekanntgeben, falls sie anderen helfen.

Bei meinem Test wird der graue Bildschirm nur auf langsameren Maschinen ausgelöst [1]. Bisher konnte ich es nicht auf neuerer Hardware erstellen [2]. Alle meine Tests wurden im IE8 mit Adobe Reader 10.1.2 durchgeführt. Für meine Tests habe ich SSL deaktiviert und alle Header entfernt, die das Caching deaktiviert haben könnten.

Um den grauen Bildschirm neu zu erstellen, habe ich folgende Schritte ausgeführt:

1) Navigieren Sie zu einer Seite, die mit einer PDF-Datei verknüpft ist
2) Öffnen Sie PDF in einem neuen Fenster oder einer neuen Registerkarte (entweder über das Kontextmenü oder über target = "_ blank").
3) In meinen Tests wird dieses PDF ohne Fehler geöffnet (jedoch habe ich Benutzerberichte erhalten, die auf einen Fehler beim ersten Laden von PDF hinweisen).
4) Schließen Sie das neu geöffnete Fenster oder die neue Registerkarte
5) Öffnen Sie die PDF (erneut) in einem neuen Fenster oder Tab
6) Dieses PDF wird nicht geöffnet, sondern zeigt nur den vom ersten Benutzer erwähnten "grauen Bildschirm" (alle nachfolgenden PDFs werden ebenfalls nicht angezeigt - bis alle Browserfenster geschlossen sind). 

Ich habe den obigen Test mit verschiedenen PDF -Dateien (sowohl statisch als auch dynamisch) durchgeführt, die aus verschiedenen Quellen generiert wurden. Das Problem mit dem grauen Bildschirm tritt immer auf, wenn Sie die obigen Schritte ausführen (auf dem "langsamen" Computer).

Um das Problem in meiner Anwendung zu mildern, habe ich die Seite "abgerissen", die mit dem PDF verknüpft ist (Teile werden Stück für Stück entfernt, bis der graue Bildschirm nicht mehr erscheint). Das Entfernen aller Verweise auf goog.userAgent.adobeReader [3] scheint das Problem in meiner speziellen Anwendung (auf Schließbibliothek aufgebaut) zu beheben. Diese exakte Lösung funktioniert nicht mit Jquery oder .net MVC. Vielleicht hilft Ihnen der Prozess dabei, die Ursache des Problems zu ermitteln. Ich habe mir noch nicht die Zeit genommen, um herauszufinden, welcher Teil von goog.userAgent.adobeReader den Fehler im Adobe Reader auslöst, aber es ist wahrscheinlich, dass Jquery einen ähnlichen Plug-in-Erkennungscode aufweist, der in Schließbibliothek verwendet wird.

[1] Bildschirm mit grauem Bildschirm:
Win Server '03 SP3
AMD Sempron 2400+ bei 1,6 GHz
256 MB Speicher

[2] Kein grauer Bildschirm auf dem Gerät:
Win XP x64 SP2
AMD Athlon II X4 620 bei 2,6 GHz
4 GB Speicher

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

3
ahochhaus

Ich hatte dieses Problem. Durch das erneute Installieren der neuesten Version von Adobe Reader wurde nichts unternommen. Adobe Reader funktionierte in Chrome, aber nicht im IE. Das hat für mich funktioniert ... 

1) Gehen Sie zum IE-Menü Extras -> Kompatibilitätsansicht.
2) Geben Sie eine Website mit der gewünschten PDF ein. OK klicken.
3) Starten Sie IE neu 4) Gehen Sie zu der von Ihnen eingegebenen Website und wählen Sie die PDF-Datei aus. Es sollte kommen.
5) Gehen Sie zurück zur Kompatibilitätsansicht und löschen Sie die vorgenommene Eingabe.
6) Adobe Reader funktioniert jetzt in IE auf allen Websites. 

Es ist eine seltsame Lösung, aber es hat für mich funktioniert. Ich musste nach der Neuinstallation einen Adobe-Akzeptanzbildschirm durchlaufen, der erst erschien, nachdem ich den Trick "Kompatibilitätsansicht" ausgeführt hatte. Einmal angenommen, schien es überall zu funktionieren. Ziemlich flockiges Zeug. Hoffe das hilft jemandem. 

1
Lisa

Für Win7 Acrobat Pro X

Da ich all dies getan habe, ohne zu prüfen, ob das Problem danach noch bestand, bin ich mir nicht sicher, welche davon das Problem tatsächlich gelöst hat, aber einer von ihnen hat es getan. Nach der # 3 und dem Neustart hat es perfekt funktioniert. 

Zu Ihrer Information: Unten ist die Reihenfolge, in der ich durch die Reparatur gegangen bin. 

  1. Gehen Sie zu den Control Panel> Ordneroptionen unter den General, View und Search Tabsclicken Sie die Restore Defaults- und die Reset Folders-Schaltfläche 

  2. Gehen Sie zu Internet Explorer, Tools> Options> Advanced> Reset (Ich habe keine persönlichen Einstellungen löschen müssen)

  3. Öffnen Sie Acrobat Pro X unter Edit> Preferences> General.
    Wählen Sie unten auf der Seite Default PDF Handler aus. Ich habe Adobe Pro X gewählt und auf Apply geklickt. 

Möglicherweise werden Sie zum Neustart aufgefordert (ich habe es getan). 

Schöne Grüße

1
FCWatson

In meinem Fall war die Lösung ziemlich einfach . Ich habe diesen Header hinzugefügt, und die Browser haben die Datei in jedem Test geöffnet.

1
David Alexandru

Zu der Zeit, als MVC1 erstmals veröffentlicht wurde, bin ich auf dieses Problem gestoßen. Siehe PDF erzeugen, Fehler mit IE und HTTPS bezüglich des Cache-Control-Headers. 

1
Todd Smith

Mir ist klar, dass dies ein relativ später Beitrag ist, aber immer noch eine mögliche Lösung für das OP. Ich verwende IE9 unter Windows 7 und hatte seit einigen Monaten Probleme mit dem grauen Bildschirm von Adobe Reader, als ich versuchte, PDF-Konto- und Kreditkartenauszüge online zu öffnen. Ich könnte alles in Firefox oder Opera öffnen, aber nicht IE. Ich habe endlich den PDF-Viewer ausprobiert, als Standard-PDF-Viewer in seinen Einstellungen festgelegt und keine Probleme mehr. Ich bin sicher, dass es andere kostenlose Zuschauer gibt, wie Foxit, PDF-Xchange usw., die bessere Ergebnisse liefern als Reader mit weniger Kopfschmerzen. Adobe ist wie einige andere große Unternehmen, die Software auf einer Take-Take-Basis entwickeln oder verlassen ... also habe ich sie verlassen.

0
puterfx

Um mehr zu experimentieren, bestand die Ursache in meiner App (Aufruf von goog.userAgent.adobeReader) darin, auf den Adobe Reader über ein ActiveXObject auf der Seite mit dem Link zur PDF-Datei zuzugreifen. Dieser minimale Testfall verursacht den grauen Bildschirm für mich (das Entfernen des ActiveXObject verursacht jedoch keinen grauen Bildschirm).

<!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>

Ich bin sehr interessiert, ob andere in der Lage sind, das Problem mit diesem Testfall zu reproduzieren und die Schritte aus meinem anderen Beitrag ("Ich habe keine genaue Lösung ...") auf einem "langsamen" Computer auszuführen.

Tut mir leid, dass ich eine neue Antwort gepostet habe, aber ich konnte nicht herausfinden, wie ich einen Codeblock in einem Kommentar zu meinem vorherigen Beitrag hinzufügen kann.

Ein Videobeispiel für diesen minimalen Testfall finden Sie unter: http://youtu.be/IgEcxzM6Kck

0
ahochhaus

Wir haben dieses Problem auch nach der Aktualisierung auf die neueste Version des Adobe Reader erhalten.

Zwei verschiedene Methoden haben dieses Problem für uns gelöst:

  • Verwenden der kostenlosen Version der Foxit Reader-Anwendung anstelle von Adobe Reader
  • Da jedoch die meisten unserer Kunden den Adobe Reader verwenden, müssen wir, anstatt dass Benutzer Foxit Reader verwenden, window.open(url) zum Öffnen der PDF-Datei anstelle von window.location.href = url verwenden. Adobe hat die Dateikennung aus verschiedenen Gründen in verschiedenen Iframes verloren, als das PDF-Dokument mit der window.location.href-Methode geöffnet wurde.
0
thecoolmacdude

Hm, wäre es möglich, dies einfach zu tun:

Wenn Ihr Benutzer zum ersten Mal eine PDF-Datei öffnet, wird mit Hilfe von Javascript ein Popout mit der Aufschrift "Wenn Sie Ihr Dokument nicht sehen können, klicken Sie bitte HIER". Machen Sie "HIER" einen großen Knopf, auf dem Sie Ihrem Benutzer erklären können, was das Problem ist. Machen Sie auch einen weiteren Button "Alles in Ordnung". Wenn der Benutzer darauf klickt, können Sie sich daran erinnern, so dass es in Zukunft nicht mehr angezeigt wird.

Ich versuche praktisch zu sein. Wenn ich mich bemühe, dieses Problem für eine kleine Teilmenge von Adobe Reader-Versionen "richtig" zu lösen, hört sich das nicht sehr produktiv an.

0
darioo