web-dev-qa-db-ja.com

PDF Adob​​e Reader 10.0を使用したInternet Explorerでファイルが開かない-ユーザーが空のグレー画面を取得します。これをユーザー向けに修正するにはどうすればよいですか?

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

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

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

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

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

エンドユーザーにシームレスのソリューションを望んでいます。AdobeReaderの設定を変更したり、アップデートを自動的にインストールしたりする方法を彼らに頼ることができないからです。

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

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

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

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

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

そして、これがActionResultです(PdfResultSystem.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

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

まず、私の研究では、さまざまなPDF表示の問題を引き起こすユーザー設定とサイト設定のいくつかの可能な組み合わせがあることを示しています。

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

PDF pdfobject.com の表示オプション)を調査するのに少し時間を費やしました。これは素晴らしいリソースであり、多くのことを学びました。

私が思いついた回避策は、空の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プラグインがインストール/有効になっていない場合、これは機能しません。そこで、「Get Adob​​e Reader」セクションをHTMLに追加し、通常<object />タグで完全に隠されるファイルをダウンロードするリンクを追加しました、...しかし...
  • Internet Explorerでは、プラグインのロードに失敗した場合、空のオブジェクトによって「Get Adob​​e Reader」セクションが非表示になるため、z-indexを設定して表示する必要がありましたが...
  • Google ChromeのビルトインPDFビューアーには、Adobe Readerの取得セクションも表示されます上に PDFがあるため、表示するかどうかを判断するためにブラウザーの検出を行う必要がありました「Get Reader」。

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

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

30
Scott Rippey

正確な解決策はありませんが、他の人を助けるために、これに関する私の経験を投稿します。

私のテストから、灰色の画面は遅いマシンでのみトリガーされます[1]。これまで、新しいハードウェアで再作成することはできませんでした[2]。私のテストはすべて、Adobe Reader 10.1.2を搭載したIE8で行われました。私のテストでは、SSLをオフにし、キャッシュを無効にする可能性のあるすべてのヘッダーを削除しました。

灰色の画面を再作成するには、次の手順を実行しました。

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

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

私のアプリケーションの問題を軽減するために、PDF(灰色の画面が表示されなくなるまで部品を1つずつ削除)にリンクしているページを「取り壊し」ました。クロージャーライブラリで)goog.userAgent.adobeReader [3]へのすべての参照を削除すると、問題が修正されたように見えます。 。goog.userAgent.adobeReaderのどの部分がAdobe Readerのバグを引き起こすのかを特定するのにまだ時間をかけていませんが、jqueryにはclosure-libraryで使用されているものと同様のプラグイン検出コードがある可能性があります。

[1]灰色の画面が表示されるマシン:
Win Server '03 SP3
AMD Sempron 2400+(1.6GHz)
256MBのメモリ

[2]マシンの画面が灰色にならない:
Win XP x64 SP2
AMD Athlon II X4 620、2.6 GHz
4GBのメモリ

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

3
ahochhaus

この問題がありました。 Adobe Readerの最新バージョンを再インストールしても何も起こりませんでした。 Adobe ReaderはChromeで動作しましたが、IEでは動作しませんでした。

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

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

1
Lisa

Win7 Acrobat Pro Xの場合

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

参考までに、以下の手順で修理を進めました。

  1. Control Panel> GeneralView、およびSearchの各タブの下のフォルダーオプションに移動し、Restore DefaultsボタンとReset Foldersをクリックします。ボタン

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

  3. Edit> Preferences> Generalの下のAcrobat Pro Xを開きます。
    ページの下部でDefault PDF Handlerを選択します。 Adobe Pro Xを選択し、Applyをクリックします。

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

ご多幸を祈る

1
FCWatson

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

1
David Alexandru

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

1
Todd Smith

これはかなり遅い投稿ですが、OPの解決策としてはまだ有効だと思います。私はWin 7でIE9を使用していますが、pdf銀行とクレジットカードの明細書をオンラインで開こうとすると、数か月間Adobe Readerのグレースクリーンの問題があります。 Firefoxですべてを開くか、OperaでしたがIEではできませんでした。最終的にPDF-Viewerを試してみました。 Foxit、PDF-Xchangeなどの無料の視聴者は、リーダーよりも頭痛の少ない優れた結果をもたらします。残しました。

0
puterfx

さらに実験すると、アプリの根本的な原因(goog.userAgent.adobeReaderを呼び出す)は、PDFへのリンクを含むページ上のActiveXObjectを介してAdobe Readerにアクセスしていました。この最小限のテストケースでは、グレーの画面が表示されます(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

0
ahochhaus

最新のAdobe Readerバージョンに更新した後でも、この問題が発生していました。

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

  • Adobe Readerの代わりにFoxit Readerアプリケーションの無料版を使用する
  • しかし、ほとんどのクライアントはAdobe Readerを使用しているため、ユーザーにFoxit Readerの使用を要求する代わりに、window.location.href = url_の代わりにwindow.open(url)を使用してPDFを開き始めました。 _window.location.href_メソッドを使用してPDFを開いたときに、Adobeはさまざまなiframeで何らかの理由でファイルハンドルを失っていました。
0
thecoolmacdude

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

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

私は実用的になろうとしています。 Adobe Readerバージョンのごく一部のサブセットでこの種の問題を「適切に」解決しようとして長い時間をかけてみても、生産性はあまり高くありません。

0
darioo