3

クライアントのブラウザで、バイナリ書き込みを介してiFrame内のCrystalReportsを使用してオンザフライで作成されたPDFをレンダリングするASP.Net4.0Webアプリケーションがあります。Webアプリは私の開発ステーション(Visual Studio 2012 Web Developer)でうまく機能しますが、本番サーバー(Win2003、IIS6)でテストしたところ、ユーザーがボタンをクリックしてPDFをストリーミングする部分は、ドキュメントの一部を表示するだけです。 (ページヘッダーのロゴのみ、PDFの残りの部分は空白です)。テストを行いました。サーバーの仮想パス上のローカルディレクトリに保存したクライアントのブラウザにバイナリデータをストリーミングする代わりに、整合性に問題のないPDFにアクセスでき、すべてのデータが保存されたドキュメントに表示されました。私は3日間グーグルをしていて、あらゆる種類のコードスニペット、IIS構成(ログファイルにエラーは表示されません)、サーバーのアクセス許可、HTMLヘッダー、web.configタグなどを試しました。運がない。IISに関係があるのではないかと思いますが、解決策が見つかりません。クライアントのブラウザでPDFをレンダリングするコードは次のとおりです。

//reportObject is a CrystalReport document object (.rpt)
Dim s As System.IO.MemoryStream = reportObj.ExportToStream(ExportFormatType.PortableDocFormat)

s.Seek(0, SeekOrigin.Begin)

With HttpContext.Current.Response
    .ClearContent()
    .ClearHeaders()
    .ContentType = "application/pdf"
    .AddHeader("Content-Disposition", "inline; filename=" & fileName)
    .BinaryWrite(s.ToArray)
    .Flush()
    .End()
End With

私もこれらを試しましたが、すべて私の開発マシンで動作しましたが、サーバーでは動作しませんでした:

With HttpContext.Current.Response
            .Clear()
            .ClearHeaders()
            .Buffer = True

            .AddHeader("Content-Disposition", "inline; filename=doc.pdf")
            .AddHeader("Content-Length", Int32.Parse(s.Length))
            .AddHeader("Content-transfer-encoding", "8bit")
            .AddHeader("Cache-Control", "private")
            .AddHeader("Pragma", "cache")
            .AddHeader("Expires", "0")
            .AddHeader("X-UA-Compatible", "IE=EmulateIE7")

            .ContentType = "application/pdf"
            .BinaryWrite(s.ToArray)

            .Flush()
            .Close()
            HttpContext.Current.ApplicationInstance.CompleteRequest()
        End With

また、これらの行:

.AppendHeader("Accept-Ranges", "none")
.OutputStream.Write(s.ToArray(), 0, Convert.ToInt32(s.Length))

何も役に立たないようです。

4

1 に答える 1

1

このスレッドで説明されている別のアプローチを実装する必要がありました。

Response.TransmitFile 送信後削除

誰かの役に立てば幸いです。

于 2012-11-14T01:31:34.300 に答える