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です(PdfResult
、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か月が経ちましたが、まだ良い解決策が見つかりませんでした。
しかし、他の人が同じ問題を抱えている場合に備えて、適切な回避策を見つけました。
さらに進歩した場合は、この回答も更新します。
まず、私の研究では、さまざまなPDF表示の問題を引き起こすユーザー設定とサイト設定のいくつかの可能な組み合わせがあることを示しています。
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>
ただし、注意事項のリストは次のとおりです。
<object />
タグで完全に隠されるファイルをダウンロードするリンクを追加しました、...しかし...z-index
を設定して表示する必要がありましたが...これは、警告の膨大なリストです。私はそれがすべての基盤をカバーすると信じていますが、私はこれをすべてのユーザー(ほとんどの人は問題を抱えていない)に適用するのは間違いなく不快です。
したがって、ユーザーがオプトインした場合にのみ、このembedded
オプションを実行することにしました。 PDFページには、「PDFの表示に問題がありますか?」というセクションがあり、設定を「埋め込み」に変更して、その設定をCookieに保存できます。GetPDF
アクションで、embed=true
Cookieを探します。これにより、PDFファイルを返すか、PDFが埋め込まれたHTMLのビューを返すかが決まります。
あーこれは、IE6互換のJavaScriptを書くよりも面白くありませんでした。
同じ問題を抱えている他の人が、自分が一人ではないことを知って安心できることを願っています!
正確な解決策はありませんが、他の人を助けるために、これに関する私の経験を投稿します。
私のテストから、灰色の画面は遅いマシンでのみトリガーされます[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
この問題がありました。 Adobe Readerの最新バージョンを再インストールしても何も起こりませんでした。 Adobe ReaderはChromeで動作しましたが、IEでは動作しませんでした。
1)IEの[ツール]-> [互換表示]メニューに移動します。
2)PDF表示したいWebサイトを入力します。[OK]をクリックします。
3)再起動IE 4)入力したWebサイトに移動し、PDFを選択します。出てくるはずです。
5)互換表示に戻り、作成したエントリを削除します。
6)Adobe Readerは、IEすべてのWebサイトで正常に動作します。
それは奇妙な修正ですが、私にとってはうまくいきました。互換表示のトリックを実行した後にのみ表示される再インストール後に、アドビの受け入れ画面を表示する必要がありました。受け入れられると、どこでも機能するように見えました。かなりフレーク状のもの。これが誰かを助けることを願っています。
Win7 Acrobat Pro Xの場合
問題がまだ存在するかどうかを再確認せずにこれらすべてを実行したため、これらのうちどれが実際に問題を解決したかはわかりませんが、そのうちの1つは問題を解決しました。実際、#3を実行して再起動すると、完全に機能しました。
参考までに、以下の手順で修理を進めました。
Control Panel
> General
、View
、およびSearch
の各タブの下のフォルダーオプションに移動し、Restore Defaults
ボタンとReset Folders
をクリックします。ボタン
Internet Explorer
、Tools
> Options
> Advanced
> Reset
に移動します(個人設定を削除する必要はありませんでした)
Edit
> Preferences
> General
の下のAcrobat Pro X
を開きます。
ページの下部でDefault PDF Handler
を選択します。 Adobe Pro X
を選択し、Apply
をクリックします。
再起動するように求められる場合があります(私はしました)。
ご多幸を祈る
私の場合、解決策は非常に簡単でした。このヘッダーを追加すると、ブラウザーはすべてのテストでファイルを開きました。 header( 'Content-Disposition:attachment; filename = "filename.pdf"');
MVC1が最初にリリースされた頃、この問題に遭遇しました。 Cache-Controlヘッダーについては PDFの生成、IEおよびHTTPS のエラー)==を参照してください。
これはかなり遅い投稿ですが、OPの解決策としてはまだ有効だと思います。私はWin 7でIE9を使用していますが、pdf銀行とクレジットカードの明細書をオンラインで開こうとすると、数か月間Adobe Readerのグレースクリーンの問題があります。 Firefoxですべてを開くか、OperaでしたがIEではできませんでした。最終的にPDF-Viewerを試してみました。 Foxit、PDF-Xchangeなどの無料の視聴者は、リーダーよりも頭痛の少ない優れた結果をもたらします。残しました。
さらに実験すると、アプリの根本的な原因(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
最新のAdobe Readerバージョンに更新した後でも、この問題が発生していました。
2つの異なる方法でこの問題を解決しました。
window.location.href = url
_の代わりにwindow.open(url)
を使用してPDFを開き始めました。 _window.location.href
_メソッドを使用してPDFを開いたときに、Adobeはさまざまなiframeで何らかの理由でファイルハンドルを失っていました。うーん、単純にこれを行うことは可能でしょうか?
ユーザーが初めてPDFを開いたときに、JavaScriptを使用して、基本的に「ドキュメントが表示されない場合は、ここをクリックしてください」というポップアウトを作成します。 「ここ」を大きなボタンにして、ユーザーに問題を説明します。また、別のボタンを「すべて大丈夫」にします。ユーザーがこれをクリックすると、それを覚えているので、将来表示されません。
私は実用的になろうとしています。 Adobe Readerバージョンのごく一部のサブセットでこの種の問題を「適切に」解決しようとして長い時間をかけてみても、生産性はあまり高くありません。