0

PDF レポートをブラウザーに配信するサーブレットがあります。また、IIS サーバーで .net アプリを実行しており、サーブレットからの PDF をストリームとして .Net アプリに返したいと考えています。次に、.Net アプリが PDF をブラウザーにレンダリングします (この手法を使用しているのは、私が理由のためです)。ここに入る必要はありません)。私は、Web リクエストを使用してこのコードが動作するため、VB/Visual Studio の開発者ではありません。

    Dim BUFFER_SIZE As Integer = 1024
    ' Create a request for the URL. 
    Dim serveraction As String = "https://OurSeverName/ServletContext/Dispatch?action=ajaxRunReport&reportName="
    Dim request As WebRequest = _
      WebRequest.Create(serveraction + ReportName.Text)

    ' Get the response.
    Dim res As WebResponse = request.GetResponse()

    ' Get the stream containing content returned by the server.
    Dim dataStream As Stream = res.GetResponseStream()

    ' Open the stream using a BinaryReader for easy access.
    Dim reader As New BinaryReader(dataStream)

    ' Read the content.
    Response.ContentType = "application/pdf"

    Response.AddHeader("content-disposition", "inline; filename=reportfile.pdf")
    Dim bytes = New Byte(BUFFER_SIZE - 1) {}

    While reader.Read(bytes, 0, BUFFER_SIZE) > 0
        Response.BinaryWrite(bytes)
    End While
    reader.Close()
    ' Clean up the streams and the response.
    Response.Flush()
    Response.Close() 

唯一の問題は、コードがすばやく実行されても、Chrome と IE で PDF をレンダリングするのに 20 ~ 30 秒かかりますが、FireFox では数秒しかかからないことです。PDFのレンダリングに遅延がある理由は何ですか? あるサーバーから別のサーバーに PDF をストリーミングするより良い方法はありますか?

4

1 に答える 1

1

ほんのわずかな微調整が必​​要でした (そして、それらはかなり重要ではなく、私には直感的ではないように思えます)。

コンテンツ タイプを設定する前に、次を追加しました。

Response.Clear()

Response.ClearHeaders()

そして、reader.Close()の後に次を追加しました

Response.End()

それだけでした。これで、PDF ファイルは Java サーブレットから IIS サーバーおよびエンド ユーザーのブラウザーに適切にストリーミングされます。

于 2013-08-22T20:12:42.547 に答える