PDF二进制而不是查看器

时间:2012-02-28 13:24:08

标签: asp.net pdf

在我们这里的应用程序中,我们为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转移到新页面,以便在完成后为小册子提供服务,但我们宁愿不这样做。

任何想法......?

0 个答案:

没有答案