【问题标题】:Send RadFlowDocument as PDF to user将 RadFlowDocument 以 PDF 格式发送给用户
【发布时间】:2016-01-25 19:14:50
【问题描述】:

我在 MVC 应用程序中使用 VS 2013、VB.Net 和 Telerik 2016 Q1。我正在使用 Telerik RadFlowDocument 创建报告,并将其以 pdf 格式发送给用户。我已成功创建报告并将其保存在本地。我的问题是,当我尝试将其转换为内存流并将其发送回用户时,用户永远无法选择下载报告。

我有一个通过 ajax 启动进程的按钮:

function supervisorPDF() {
    $.ajax({
        url: '@Url.Action("GenerateSupervisorReportPDF", "InteriorReport")',
        type: 'POST'
    })
    .success(function (result) {

    })
    .error(function (xhr, status) {
        alert(status);
    })
}

我有一个接收ajax调用然后生成报告的子例程:

    Sub GenerateSupervisorReportPDF()
        Dim generator As New PdfGenerator
        Dim selectedSupervisorName = System.Web.HttpContext.Current.Session("selectedSupervisorName").ToString()
        Dim selectedSupervisorIdNumber = System.Web.HttpContext.Current.Session("selectedSupervisorIdNumber").ToString()
        Dim report As New RadFlowDocument

        Dim viewModel As New SupervisorReportViewModel
        Dim model = viewModel.getSupervisorReportInfo(selectedSupervisorName, selectedSupervisorIdNumber)

        report = generator.generateSupervisorPdf(model)

        Dim provider As New PdfFormatProvider()
        Dim output As New MemoryStream
        provider.Export(report, output)

        Dim buffer As Byte()

        Try
            buffer = output.ToArray
            Response.ClearContent()
            Response.ClearHeaders()
            Response.ContentType = "application/pdf"
            Response.OutputStream.Write(buffer, 0, buffer.Length)
            Response.AddHeader("Content-Disposition", "attachment;filename=SupervisorReport.pdf")
            Response.End()
        Catch ex As Exception

        End Try

    End Sub

在这个子例程中,如果我将output 声明为本地文件路径,那么一切都会按预期工作。但是,当使用此实现时,我的 Response.OutputStream 总是以 null 结束。没有错误被抛出。

我需要进行哪些更改才能将此报告发回给用户,以便他们可以选择下载报告?

【问题讨论】:

  • 您将无法通过 ajax 执行此操作 - 您需要将浏览器 (location.href) 重定向到 pdf 生成操作。即<a href='@Url.Action("GenerateSupervisorReportPDF", "InteriorReport")'>download report</a>
  • @freedomn-m 你是对的,谢谢

标签: asp.net-mvc vb.net telerik


【解决方案1】:

您将无法通过 ajax 执行此操作。

为了让浏览器接收和处理

Content-Disposition:attachment

必须直接浏览。

ajax 调用可能会将二进制文件下载到 jquery,但 jquery 将无法将其保存在本地。

最简单的选择是让浏览器打开一个链接,指向直接生成 PDF 的操作,例如:

<a href='@Url.Action("GenerateSupervisorReportPDF", "InteriorReport")'>download report</a>

另外,您可以将所有 Response. 代码减少为一个简单的 return FileStreamResult(... 并且它应该处理提示用户保存等 - 我将把这个留给你(因为我没有确切的语法)

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 2011-09-09
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多