2011-12-09 10 views
2

Reporting Servicesを使用してPDFレポートを生成しており、ブラウザウィンドウにレンダリングし、ブラウザに埋め込む必要があります。私たちはこれを長い間行ってきましたが、IE9まではいつも働いていました。動的に作成されたPDFは64ビットIE9ウィンドウにインライン展開されていません

IE6、IE7、およびIE8では、PDFレポートを表すReporting Servicesからバイト配列を生成し、バイナリをブラウザに書き出します。すべてうまく動作します。 PDFはブラウザに埋め込まれて表示されます。

IE9では、同じことを試みますが、PDFはブラウザウィンドウに埋め込まれていません。ブラウザウィンドウは開いたまま空白/空白になり、PDFは別のウィンドウでAdobe Readerで開かれます。

は、ここに私たちのコードの抜粋です:

try 
{ 
    // Set all the Reporting Services variables and parameters and render the report 
    // ... 
    byte[] result = rs.Render(format, devInfo, out extension, out mimeType, out encoding, out warnings, out streamIDs); 

    // Force the render out of the report to the browser 
    Response.Clear(); 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.AppendHeader("content-length", result.Length.ToString()); 
    Response.AppendHeader("Pragma", "cache"); 
    Response.AppendHeader("Expires", "3600"); 
    Response.Buffer = true; 
    Response.Cache.SetCacheability(HttpCacheability.Private); 
    Response.CacheControl = "private"; 
    Response.Charset = System.Text.UTF8Encoding.UTF8.WebName; 
    Response.ContentEncoding = System.Text.UTF8Encoding.UTF8; 

    switch (outputformat) 
    { 
     case "PDF": 
      Response.AppendHeader("content-disposition", "inline; filename=report.pdf"); 
      Response.ContentType = "application/pdf"; 
      break; 
     default: 
      break; 
    } 

    Response.BinaryWrite(result); 
    Response.Flush(); 
    Response.Close(); 
    Response.End(); 
} 
catch (System.Exception ex) 
{ 
    // ... 
} 

我々はPDFがIE9のbroswerウィンドウでレンダリングされ、埋め込まれた取得することができますか?

ありがとうございます!

+0

アクロバットリーダーのバージョン情報を追加できますか? (IE 6/7/8 boxenとIE9と組み合わせて使用​​されるもの) –

+1

情報ありがとう、Lynn。それは役に立ちました。私は、Adobe Readerバージョン9.4.6と10.1.1(2つの別々のコンピュータ - Windows Server 2008 R2とIE9の両方)を試しましたが、Readerの両方のバージョンに同じ問題がありました。この問題は、IE9の64ビット版の使用に起因するように見えます。 IE9の64ビット版を使用している場合、ブラウザウィンドウではなくAdobe ReaderアプリでPDFが開きます。 IE9の32ビット版を使用すると、以前のバージョンのIEおよびAdobe Readerと同じように、PDFがブラウザウィンドウに表示されます。したがって、注意すべき点は、この状況では32ビットIEを使用してください。 – lmttag

+0

私の既存の回答に追加されました。 httpやhttpsで送信していますか? –

答えて

1

は、このフォーラムの投稿を見てみましょう: http://forums.adobe.com/message/3331557#3331557#3331557

また、別の修正については、この全体のスレッドの協議がIEの仕事の異なるバージョンを作成します。この問題を引き起こす原因は複数あります。

http://forums.adobe.com/thread/758489

ある読者もそれはあなたがやっているように見えるPDF、で終わらなければならないと指摘しました。

異なるバージョンのAcrobat Readerを使用していた場合、この問題は実際にIEではなくReaderの変更に関連する可能性があります。


あなたのコメントでは、64ビット問題がありました。あなたがすでに彼はプライベートに(彼の最終的な答えで、すなわち、設定キャッシュ制御を行うために必要と述べたすべてのものをやっていることが表示されます
Can't display PDF from HTTPS in IE 8 (on 64-bit Vista)

、および:このSO答える再IE8/64ビットVistaをチェックないプラグマを設定しません:。

response.setHeader("Cache-Control","private"); 

代わりの

を呼び出す:ノーキャッシュ)

それは、様々な反応が手動経由でヘッダを付加する方法を行っていることに、注意することは興味深いことです

Response.Cache.SetCacheability(HttpCacheability.Private); 
Response.CacheControl = "private"; 

確かに違いはありますが、ショットに値する可能性があります。

+0

コメントのために便利です。ここではadobeのkb記事で、実際にこのような音を出す場所はサポートされていません。このkbが最新であるかどうかわからない:http://kb2.adobe.com/cps/328/328233.html –

1

PDFインラインの表示は、Acrobat Readerの設定で実際に制御できることに注意してください。

メニューEdit > Preferences...の左側のナビゲーションからInternetを選択し、Display PDF in browserがオンになっていることを確認します。

2

Internet Explorer 64bitは64bitプラグインのみを実行できます。 Adobe PDFプラグインは32ビットで、64ビットIEでは実行できません。これは他の人を助けるかもしれない

3

希望は、私はjqueryの

function MyFunction(someprams) { 
    if (navigator.userAgent.indexOf("x64") == -1) { 
     window.open("yourpage2.aspx?PramName=PramVal, 'winowname', 'window opions here') 
    } else { 
     $.get("yourpage1.aspx", { PramName1: PramVal1, PramName1: PramVal1 }, 
      function(data) { 
       $('#divid').html(data); 
      }); 
    } 
} 

を使用して並べ替えの周りハック/仕事を見つけたので、それからだけのページにdiv要素を追加します。

yourpage1は呼び出して、ストリームどのようなページですPDFファイルと設定キャッシュ・ヘッダー

その後、yourpage2である私は、SRCのdynamicly設定することをそれにiframを持っているaspxページ: iframeid.Attributes.Add( "SRC"、 "?yourpage1.aspxを" pram1 =」 & Request.QueryString( "PramV AL1" )) ノートiframウルaslo proballyそれはuが CSSを行うことができますiframの高さが100%をロードすると、サーバーのタグに実行を必要とする:

html { height: 100%;} 
body { height: 100%;} 

HTML:

<iframe id="iframeid" runat="server" scrolling="no" marginwidth="0" marginheight="0" 
     frameborder="0" vspace="0" hspace="0" style="overflow: visible; width: 100%; 
     height: 100%;"></iframe> 

ユーザーがIE 32ビットであれば、そこにpdfを表示した新しいウィンドウが表示されます(実際にはフレームには表示されますが、Untentが表示されます)か、IE 64であればウィンドウをスキップしてストリームを表示しますpdfを直接私たちのページに入れてください。これは、この作品のすべてにので、すべてのブラウザウィンドウではなく、直接PDFとしてではない開くためのAdobe PDFを強制し、両方の64 & 32 IE

私はストリーム読者が問題を引き起こし見つけた

でOKに見えますが、これは、うまく動作

Dim oWebClient As System.Net.WebClient = Nothing 
Dim data() As Byte 
try 
oWebClient = New System.Net.WebClient 
data = oWebClient.DownloadData(pdfurl) 
//add Response.AddHeader stuff here e.g. 
Response.AddHeader("Content-Length", data.Length.ToString) 
Response.BinaryWrite(data) 
0

64ビットIE9にバグがあるようです。表示されるPDFファイルのoutputStreamに使用されるファイル拡張子が大文字である場合、例えば、 'myFile.pdf'のように小文字ではなく 'myFile.PDF'を指定すると、outputStreamのmimeTypeがapplication/pdfとして認識されません。代わりにmimeTypeテキストがデフォルトで使用されます。この種のページはまったくレンダリングされないか、部分的にレンダリングされたり、読めないフォントでレンダリングされたりします。小文字の.pdfファイル拡張子を大文字で使用するようにしてください。 幸運!

関連する問題