PDF Binary вместо Viewer - PullRequest
       6

PDF Binary вместо Viewer

0 голосов
/ 28 февраля 2012

В нашем приложении мы создаем буклет с рекомендациями для пользователей веб-приложения. Это довольно здоровенные документы, на создание которых уходит до 30 секунд. Мы решили, что лучший способ для этого - создать PDF-файл в фоновом режиме приложения до того, как пользователь его запросит.

Если пользователь запрашивает PDF, открывается страница, которая проверяет, завершен ли буклет и отображается ли он пользователю.

Это прекрасно работает во всех случаях, если Adobe не установлен на «Отображать PDF в браузере» и пользователь не использует IE8 или IE7.

В этом случае мы получаем предупреждение о загружаемом файле, и этот файл отображается в виде двоичного текста.

Мы извлекаем файл pdf, когда приложение запускает вызов ajax, который генерирует содержимое, используя следующий код.

Зацикливаться, пока буклет не будет готов.

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

Самый простой способ для нас это исправить - просто откликнуться. Переадресация на новую страницу для обслуживания буклета после его завершения, но мы бы предпочли этого не делать.

Есть идеи ...?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...