31

Internet Explorer(v 6、7、8、9)でAdobe Reader X(バージョン10.0。*)を使用してPDFを開く際に既知の問題があります。ブラウザウィンドウが空の灰色の画面で読み込まれます(リーダーツールバーもありません)。Firefox、Chrome、またはAdobe Reader10.1。*で完全に正常に動作します。

私はいくつかの回避策を発見しました。たとえば、[更新]をクリックすると、ドキュメントが正しく読み込まれます。Adobe Reader 10.1。*にアップグレードするか、9。*にダウングレードすると、問題も修正されます。
ただし、これらのソリューションはすべて、ユーザーがそれを理解する必要があります。私のユーザーのほとんどは、この灰色の画面を見るのに非常に混乱し、PDFファイルを非難し、Webサイトが壊れていると非難することになります。正直なところ、私が問題を調査するまで、私もPDFを非難しました!

だから、私は私のユーザーのためにこの問題を修正する方法を見つけようとしています。
「PDFのダウンロード」リンク(Content-Dispositionヘッダーをattachmentではなくに設定するinline)を提供することを検討しましたが、これらのPDFファイルをブラウザーに表示したいので、私の会社はそのソリューションをまったく好みません。

他の誰かがこの問題を経験しましたか?

考えられる解決策または回避策は何ですか?

エンドユーザーがAdobeReaderの設定を変更したり、更新を自動的にインストールしたりする方法を知っているとは思えないので、エンドユーザーにとってシームレスなソリューションを本当に望んでいます。

これが恐ろしい灰色の画面です:
編集:スクリーンショットがファイルサーバーから削除されました!ごめん!
画像は通常のツールバーを備えたブラウザウィンドウでしたが、背景は灰色で、UIはまったくありませんでした。

背景情報
次の情報は私の問題に関連しているとは思いませんが、参照用に含めます。
これはASP.NET MVCアプリケーションであり、jQueryを使用できます。
PDFファイルへのリンクtarget=_blankは、新しいウィンドウで開くようになっています。
PDFファイルはオンザフライで生成されており、すべてのコンテンツヘッダーが適切に設定されています。.pdfURLには拡張子は含まれていませんが、有効なファイル名と設定でcontent-dispositionヘッダーを設定しています。 .pdfinline

編集:これは私がPDFファイルを提供するために使用しているソースコードです。

まず、コントローラーのアクション:

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

そして、これがActionResult(PdfResult、inherits 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);
    }
}
4

10 に答える 10

31

この質問をしてから4か月が経ちましたが、まだ良い解決策が見つかりませんでした。
ただし、他の人が同じ問題を抱えている場合に備えて共有する、適切な回避策を見つけました。
さらに進んだら、この回答も更新していきます。

まず第一に、私の調査では、さまざまなPDF表示の問題を引き起こすユーザー設定とサイト設定のいくつかの可能な組み合わせがあることがわかりました。これらには以下が含まれます:

  • 壊れたバージョンのAdobeReader(10.0。*)
  • InternetExplorerとデフォルト設定「暗号化されたファイルをディスクに保存しない」を備えたHTTPSサイト
  • AdobeReaderの設定-「ブラウザにPDFファイルを表示する」を無効にする
  • 遅いハードウェア(@ahochhausに感謝)

優れたリソースであるpdfobject.comでPDF表示オプションの調査に時間を費やし、多くのことを学びました。

私が思いついた回避策は、空のHTMLページ内にPDFファイルを埋め込むことです。非常に簡単です 。pdfobject.comで同様の例をいくつか参照してください

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

ただし、注意事項のリストは次のとおりです。

  • これはPDFのすべてのユーザー設定を無視します-たとえば、私は個人的にPDFをスタンドアロンのAdobe Readerで開くのが好きですが、それは無視されます
  • Adobe Readerプラグインがインストール/有効化されていない場合、これは機能しません。そのため、HTMLに「GetAdobe Reader」セクションと、通常は<object />タグによって完全に非表示になるファイルをダウンロードするためのリンクを追加しました。 ... しかし ...
  • Internet Explorerでは、プラグインの読み込みに失敗した場合でも、空のオブジェクトで[Adobe Readerの取得]セクションが非表示になるため、表示するように設定する必要がありz-indexました...しかし...
  • Google Chromeの組み込みPDFビューアでは、PDFの上に「GetAdobe Reader」セクションも表示されるため、「GetReader」を表示するかどうかを判断するためにブラウザ検出を行う必要がありました。

これは警告の膨大なリストです。私はそれがすべての基盤をカバーしていると信じていますが、私はこれをすべてのユーザー(ほとんどのユーザーは問題がありません)に適用するのは間違いなく快適ではありません。
したがって、このembeddedオプションは、ユーザーがオプトインした場合にのみ実行することにしました。PDFページには、「PDFの表示に問題がありますか?」というセクションがあり、設定を「埋め込み」に変更して、その設定をCookieに保存します。アクションでは、 Cookieを探します
。これにより、PDFファイルを返すか、PDFが埋め込まれたHTMLのビューを返すかが決まります。GetPDFembed=true

うーん。これは、IE6互換のJavaScriptを作成するよりもさらに面白くありませんでした。
同じ問題を抱えている他の人たちが、自分たちだけではないことを知って安心できることを願っています。

于 2012-01-24T20:27:57.907 に答える
3

私には正確な解決策はありませんが、他の誰かを助ける場合に備えて、これに関する私の経験を投稿します。

私のテストによると、灰色の画面は低速のマシンでのみトリガーされます[1]。現在まで、新しいハードウェアで再現することはできませんでした[2]。私のテストはすべて、AdobeReader10.1.2を使用したIE8で行われました。私のテストでは、SSLをオフにして、キャッシュを無効にする可能性のあるすべてのヘッダーを削除しました。

灰色の画面を再現するには、次の手順に従いました。

1)PDFにリンクしているページに移動します
2)新しいウィンドウまたはタブでPDFを開きます(コンテキストメニューまたはtarget = "_ blank"を使用)
3)私のテストでは、このPDFはエラーなしで開きます(ただし、最初のPDFロードで失敗を示すユーザーレポートを受け取りました)
4)新しく開いたウィンドウまたはタブを閉じます
5)新しいウィンドウまたはタブでPDFを(もう一度)開きます
6)このPDFは開きませんが、代わりに「灰色」のみを表示します最初のユーザーが言及した「画面」(ロードされた後続のすべてのPDFも表示されません-すべてのブラウザウィンドウが閉じられるまで)

さまざまなソースから生成されたいくつかの異なるPDFファイル(静的および動的の両方)を使用して上記のテストを実行しましたが、上記の手順を実行すると(「遅い」コンピューターで)グレー画面の問題が常に発生します。

アプリケーションの問題を軽減するために、PDFにリンクしているページを「破棄」しました(灰色の画面が表示されなくなるまで、パーツを1つずつ削除しました)。私の特定のアプリケーション(closure-library上に構築)では、goog.userAgent.adobeReader [3]へのすべての参照を削除すると、問題が修正されたようです。この正確な解決策はjqueryまたは.netMVCでは機能しませんが、このプロセスは問題の原因を特定するのに役立つ可能性があります。goog.userAgent.adobeReaderのどの部分がAdobeReaderのバグを引き起こすのかを特定するのにまだ時間がかかりませんが、jqueryにはclosure-libraryで使用されているものと同様のプラグイン検出コードがある可能性があります。

[1]灰色の画面が表示されるマシン: 1.6GHz256MB メモリのWinServer
'03 SP3
AMD Sempron 2400+

[2]灰色の画面が表示されないマシン: 2.6GHz4GBメモリで
WindowsXPx64 SP2
AMD Athlon II X4 620

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

于 2012-01-24T17:58:11.103 に答える
1

MVC1が最初にリリースされた頃にこの問題に遭遇しました。Cache-Controlヘッダーについては、PDFの生成、IEおよびHTTPSのエラーを参照してください。

于 2011-10-01T00:17:05.110 に答える
1

Win7 AcrobatProXの場合

後で問題がまだ存在するかどうかを再確認せずにこれらすべてを行ったので、これらのどれが実際に問題を修正したかはわかりませんが、そのうちの1つは修正しました。実際、#3を実行して再起動した後は、完全に機能しました。

参考:以下は、修理を行った順序です。

  1. Control Panel各の下にある>フォルダオプションに移動し、GeneralタブをクリックしてボタンとボタンをクリックしますViewSearchRestore DefaultsReset Folders

  2. Internet ExplorerTools>>>に移動しOptionsます(個人設定を削除する必要はありませんでしたAdvancedReset

  3. >>Acrobat Pro Xの下で、を開きます。 ページの下部でを選択します。を選択し、をクリックします。EditPreferencesGeneral
    Default PDF HandlerAdobe Pro XApply

再起動するように求められる場合があります(私はそうしました)。

幸運をお祈りしています

于 2012-09-30T20:00:03.993 に答える
1

私の場合、解決策は非常に簡単でした。このヘッダーを追加すると、ブラウザーはすべてのテストでファイルを開きました。header('Content-Disposition:attachment; filename = "filename.pdf"');

于 2013-09-23T07:32:11.167 に答える
1

私はこの問題を抱えていました。最新バージョンのAdobeReaderを再インストールしても何も起こりませんでした。Adobe ReaderはChromeで動作しましたが、IEでは動作しませんでした。これは私のために働いた...

1)IEの[ツール]->[互換表示]メニューに移動します。
2)見たいPDFのあるWebサイトを入力します。[OK]をクリックします。
3)IEを再起動します。4)入力したWebサイトに移動し、PDFを選択します。出てくるはずです。
5)互換表示に戻り、作成したエントリを削除します。
6)Adobe Readerは、すべてのWebサイトのIEで正常に動作するようになりました。

これは奇妙な修正ですが、私にとってはうまくいきました。再インストール後、互換表示のトリックを実行した後にのみ表示されるアドビの承認画面を確認する必要がありました。受け入れられると、それはどこでも機能するように見えました。かなり薄片状のもの。これが誰かを助けることを願っています。

于 2014-05-26T01:59:51.657 に答える
0

うーん、これを簡単に行うことは可能でしょうか:

ユーザーが初めてPDFを開くときは、Javascriptを使用して、基本的に「ドキュメントが表示されない場合は、ここをクリックしてください」というポップアップを作成します。「ここ」を大きなボタンにして、ユーザーに何が問題なのかを説明します。また、別のボタンを「すべて問題ありません」にします。ユーザーがこれをクリックすると、覚えているので、今後は表示されません。

私は実用的にしようとしています。Adobe Readerバージョンの小さなサブセットに対してこの種の問題を「適切に」解決しようと努力することは、私にはあまり生産的ではないように思われます。

于 2011-09-28T19:56:36.520 に答える
0

さらに実験してみると、私のアプリ(goog.userAgent.adobeReaderを呼び出す)の根本的な原因は、PDFへのリンクがあるページのActiveXObjectを介してAdobeReaderにアクセスすることでした。この最小限のテストケースでは、灰色の画面が表示されます(ただし、ActiveXObjectを削除しても灰色の画面は表示されません)。

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

他の人がこのテストケースで問題を再現し、「遅い」コンピューターで他の投稿の手順(「正確な解決策がありません...」)に従うことができるかどうか、私は非常に興味があります。

新しい回答を投稿して申し訳ありませんが、以前の投稿のコメントにコードブロックを追加する方法がわかりませんでした。

この最小限のテストケースのビデオ例については、http://youtu.be/IgEcxzM6Kckを参照してください。

于 2012-01-25T00:36:48.480 に答える
0

私はこれがかなり遅い投稿であることを理解していますが、それでもOPの可能な解決策です。私はWin7でIE9を使用していますが、PDFバンクとクレジットカードの明細書をオンラインで開こうとすると、AdobeReaderのグレー画面の問題が数か月発生します。FirefoxまたはOperaですべてを開くことはできましたが、IEではできませんでした。私はついにPDF-Viewerを試し、その設定でデフォルトのpdfビューアとして設定しましたが、これ以上問題はありません。Foxit、PDF-Xchangeなど、他にも無料のビューアがあり、頭痛の少ないリーダーよりも優れた結果が得られると確信しています。アドビは、ソフトウェアを開発する他の大企業のように、それを受け入れるか、それを残すか...だから私はそれを残しました。

于 2013-06-16T11:34:15.190 に答える
0

最新のAdobeReaderバージョンにアップデートした後でも、この問題が発生していました。

2つの異なる方法でこの問題を解決しました。

  • AdobeReaderの代わりに無料版のFoxitReaderアプリケーションを使用する
  • ただし、ほとんどのクライアントはAdobe Readerを使用しているため、ユーザーにFoxit Readerの使用を要求する代わりに、window.open(url)の代わりにpdfを開くために使用し始めましたwindow.location.href = urlwindow.location.hrefこのメソッドを使用してPDFを開いたときに、Adobeはさまざまなiframeで何らかの理由でファイルハンドルを失っていました。
于 2015-09-04T15:53:31.860 に答える