0

我们有一个 servlet,可以将 PDF 报告传送到浏览器。我们还有一个运行 .net 应用程序的 IIS 服务器,我们希望将 servlet 中的 PDF 作为流返回给 .Net 应用程序,然后 .Net 应用程序将 PDF 呈现给浏览器(我们使用这种技术是因为我不需要进入这里)。我不是一个 VB/Visual Studio 开发人员,因为这段代码是通过使用 Web 请求来工作的:

    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.ClearHeaders()

我在 reader.Close() 之后添加了以下内容

响应结束()

就是这样。现在 PDF 文件很好地从 Java servlet 流到 IIS 服务器和最终用户的浏览器。

于 2013-08-22T20:12:42.547 回答