在我们这里的应用程序中,我们为Web应用程序上的用户创建了一个建议书pdf。这些是非常大的文档,需要30秒才能生成。我们认为最好的方法是在用户请求之前在应用程序的后台生成pdf。
如果用户请求PDF,则会打开一个页面,检查小册子是否完整以及何时将其显示给用户。
除非将adobe设置为NOT'在浏览器中显示PDF并且用户使用的是IE8或IE7,否则这种情况在每种情况下都很有用。
在这种情况下,我们会收到有关下载文件的警告消息,该文件显示为二进制文本。
当应用程序触发生成使用以下代码推送内容的ajax调用时,我们会提取pdf。
循环直到小册子准备就绪。
If pdfState = PdfBooklet.Status.Complete Then
If Me.SupportsScript Then
' Send signal back to Ajax call saying we're ready
Response.ClearContent()
Response.Write("complete")
Response.End()
Else
' Non-JS can just have it delivered straight away
pdf = CType(HttpContext.Current.Session(PdfBooklet.sSessionBookletKey), Byte())
ServerPDFBooklet(pdf)
End If
Else
' Not finished yet
Response.ClearContent()
If Me.SupportsScript Then
If isAjaxRequest Then
' Signal back to Ajax to wait a bit long
Response.Write("waiting")
Response.End()
End If
Else
' Non-JS => page refresh
Response.AddHeader("refresh", "3")
End If
End If
并写下pdf
With Response
.Clear()
.ClearHeaders()
.AddHeader("Content-Disposition", "inline; filename=" & pdfFilename & ".pdf")
.ContentType = "application/pdf"
Try
.BinaryWrite(binaryPDF)
.Flush()
.End()
Catch Ex As HttpException When Ex.ErrorCode = &H80072746
'Client disconnected
End Try
End With
我们解决这个问题的简单方法就是将response.redirect转移到新页面,以便在完成后为小册子提供服务,但我们宁愿不这样做。
任何想法......?