将Crystal报表导出为循环中的PDF仅适用于第一个

时间:2015-01-29 17:14:58

标签: asp.net vb.net pdf crystal-reports export

我试图生成一个报告并将其导出到循环中的pdf,报告将在每个循环中收到一个新参数并提示客户端下载PDF,换句话说,客户端可能需要同时下载2或3个(或更多)PDF,问题是接收下载的提示只出现在第一个pdf中,不知道为什么。我可以毫无问题地导出到磁盘(服务器端)。

代码:

Sub PrintReport(ByVal Cod As Integer)
        Dim CTableLogInfo As TableLogOnInfo
        Dim ConnInfo As CrystalDecisions.Shared.ConnectionInfo = New ConnectionInfo()
        ConnInfo.Type = ConnectionInfoType.SQL
        ConnInfo.ServerName = ConfigurationManager.AppSettings("SQLSERVERNAME")
        ConnInfo.DatabaseName = ConfigurationManager.AppSettings("SQLDBNAME")
        ConnInfo.UserID = ConfigurationManager.AppSettings("SQLSERVERUSER")
        ConnInfo.Password = ConfigurationManager.AppSettings("SQLSERVERPASSWORD")
        ConnInfo.AllowCustomConnection = False
        ConnInfo.IntegratedSecurity = False

        For Each CTable As Table In CrystalReportSource1.ReportDocument.Database.Tables
            CTable.LogOnInfo.ConnectionInfo = ConnInfo
            CTableLogInfo = CTable.LogOnInfo
            CTableLogInfo.ReportName = CrystalReportSource1.ReportDocument.Name
            CTableLogInfo.TableName = CTable.Name
            CTable.ApplyLogOnInfo(CTableLogInfo)
        Next

        Dim pField As ParameterField = CrystalReportSource1.ReportDocument.ParameterFields(0)
        Dim val1 As ParameterDiscreteValue = New ParameterDiscreteValue
        val1.Value = Cod
        pField.CurrentValues.Clear()
        pField.CurrentValues.Add(val1)


        Dim PDFName As String = "PDF Nº " & Cod 
        CrystalReportSource1.ReportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Page.Response, True, PDFName)      
    End Sub

编辑: 试图用DotNetZip压缩报告,但我得到一个破损的拉链。

你告诉我什么错了吗? (已解决:现在更正了代码吼叫)

    Response.ClearContent()
    Response.ClearHeaders()
    Response.ContentType = "application/zip"
    Response.AppendHeader("content-disposition", "attachment; filename=AllPDFs.zip")

    Using zipFile As New ZipFile()
        For i = 0 To Cod.Length - 1
            If Cod(i) > 0 Then
                val1.Value = Cod(i)
                pField.CurrentValues.Clear()
                pField.CurrentValues.Add(val1)

                val2.Value = Cod(i)
                pField2.CurrentValues.Clear()
                pField2.CurrentValues.Add(val2)

                Dim PDFNameAs String = "PDF Nº " & Cod(i) & ".pdf" 

                Dim s As New System.IO.MemoryStream 
                s =CrystalReportSource1.ReportDocument.ExportToStream(ExportFormatType.PortableDocFormat)
                zipFile.AddEntry(PDFName, s)
            End If
        Next
        zipFile.Save(Response.OutputStream)
    End Using
    Response.Clear()

1 个答案:

答案 0 :(得分:0)

可能响应在第一次响应之后结束,因此第二次和第三次尝试都没有响应。

相反,您可以让客户端通过AJAX请求下载报告(将报告生成移动到.ashx通用处理程序中),或让用户单击按钮3次以发起新请求。

或者将PDF压缩到单个文件并允许客户端下载该文件。