私たちのアプリケーションでは、アプリケーションから PDF を取得する必要があり、IE9 [8 または 7] に表示する必要があります。アプリケーションは ASP.Net MVC 3 にあり、PDF ファイルは SSRS から来ており、ユーザー基準に基づいて SSRS は PDF を返します。タグでブラウザに表示されます。
Visual Studio 2010 でアプリケーションをデバッグ モードで実行し、IIS7.5 でホストされているアプリケーションを実行すると、問題なく動作します。しかし、デバッガーなしでアプリケーションにアクセスするとすぐに、PDF はレンダリングされず、オブジェクト タグに読み込まれず、Adobe AtiveX PDF Viewer も表示されません。
問題の原因を突き止めるために、IE9 開発者ツールバーからキャプチャされたネットワーク ログから、URL : http://myhostname/Home/GetProfile/11
Result : Aborted Type : Initiator : ActiveX Control Initialization が判明しました。
Chrome で同じアプリケーションにアクセスすると、Chrome は問題なく PDF をロードしますが、IE9 は PDF をロードできません。
以下はコードです。
基準ページ
<body>
<div>
<form id ="frmReport" method="get" action='@Url.Action("Report","Home")'
target="iReport">
<input type="text" />
<input type="submit" value="Click"/>
</form>
<iframe id="iReport" name="iReport"></iframe>
</div>
</body>
上記の iReport iframe では、オブジェクト タグを持つ結果 HTML が取得されます。
レポート ビューアーの HTML コード。
<div id="reportContainer">
@{string urlPDF = "http://myhostname" + @Url.Action("GetProfile",
"Home", new { Id = "11" });
<object id = "pdfView" height="600px" width="100%"
type='application/pdf' data='@urlPDF'>
</object>}
</div>
MVC アプリケーションのコード。
public FileStreamResult GetProfile(string Id)
{
var contentDisposition = new ContentDisposition
{
FileName = "Profile.pdf",
Inline = true
};
Response.AppendHeader("Content-Disposition", contentDisposition.ToString());
byte[] bytes = ReportStore.GetProfileInByte(Id);
MemoryStream ms = new MemoryStream(bytes);
return new FileStreamResult(ms, MediaTypeNames.Application.Pdf);
}
FileStreamResult の代わりに FileContentResult を試しましたが、問題は同じです。
IE9の何が問題なのか知っている人はいますか? サーバーから応答されたリクエストに問題のないアプリケーションをトレースしましたが、IE9-PDF ActiveX がコンテンツのレンダリングを処理していません。
これだけでなく、数台のマシンで試してみたところ、結果は同じで残念でした. マシンには IE9 と AdobePDFReder 9\10 があります。VS.Net Debugger ではどこでも動作していますが、デバッガーから出ると失敗し始めます。
ありがとう