2010-06-30 82 views
0

我有一个报告查看器,我希望在用户输入参数并单击提交按钮后打开PDF格式的报告该报告在报告查看器窗口被打开)Crystal Report Viewer - 输入参数后导出到/打开PDF

我做了一些阅读的其他地方,发现这个片段

rptSP.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "Report"); 

而且我还发现,其中建议以下内容的帖子:

编写代码以将报表导出到CrystalReportViewer_BeforeRenderObject事件内部的PDF中。

但我还没有太多过去。任何人都可以提供代码示例,或链接到显示此解决方案的地方?

回答

1

您可以在提交按钮的单击事件获取报表参数,并获取报告根据这些参数数据,并在此之后,你可以将其导出。

下面是这样做的示例代码。

ReportDocument rptDoc = new ReportDocument(); 
rptDoc.Load(Server.MapPath("ETR0040.rpt")); 


// Fetch report parameters to retrieve report data. 
... 

// Retrieve report data. 
DataSet dsResult = DBGateway.ExecuteCommand('command'); 
rptDoc.SetDataSource(dsResult); 

// Report parameters - to be passed if there are any parameters which should be passed to report. 
rptDoc.SetParameterValue("CustomerCode", customerCode); 

DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions(); 
string targetFileName = Request.PhysicalApplicationPath + "Reports\\TempReports\\" + (new Random()).Next() + ".pdf"; 

rptDoc.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile; 
rptDoc.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat; 

diskOpts.DiskFileName = targetFileName; 
rptDoc.ExportOptions.DestinationOptions = diskOpts; 

// Export report ... Server-Side. 
rptDoc.Export(); 

FileInfo file = new FileInfo(targetFileName); 

Response.ClearContent(); 
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
Response.AddHeader("Content-Length", file.Length.ToString()); 
Response.ContentType = "application/pdf"; 
Response.TransmitFile(file.FullName); 
+0

没有得到答案。当我们保存的PDF文件。它应该要求密码打开它...如何实现它。 – Niks 2013-04-05 05:26:35

0

我挖掘了一个我在2006年提交的旧的codeproject文章,该文章从Crystal Reports项目导出为pdf。我不确定这些库是否已经相关 - 甚至更糟糕的是,它在VB中。希望这可以起作用,或者至少指向正确的方向。

Imports CrystalDecisions.CrystalReports.Engine 
Imports CrystalDecisions.Shared 
' 
' <snip> 
Dim ExportToFile As New CsReports.Reports 
ExportFile = ExportPath + Session.SessionID.ToString + ".pdf" 
ExportToFile.ReportToPDF(crReportDocument, ExportFile) 
Try 
    ' Export the report 
    crReportDocument.Export() 
    Response.ClearContent() 
    Response.ClearHeaders() 
    Response.ContentType = "application/pdf" 
    Response.WriteFile(ExportFile) 
    Response.Flush() 
    Response.Close() 
    System.IO.File.Delete(ExportFile) 
Catch err As Exception 
    Throw err 'MessBox("Error: Export Failed.!" + err.Message.ToString) 
End Try 'Adobe Acrobat Export*************************** 

然后有方法ReportToPDF:

Imports CrystalDecisions.CrystalReports.Engine 
Imports CrystalDecisions.Shared 
Imports System 
Imports System.Data 
Imports System.Web.UI.Page 
Imports System.IO 

Namespace CsReports 
Public Class Reports 
    Inherits System.Web.UI.Page 

    Dim crExportOptions As ExportOptions 
    Dim crDiskFileDestinationOptions As DiskFileDestinationOptions 

    Public Sub ReportToPDF(ByVal crReportName As ReportDocument, ByVal ExportFile As String) 
     ' Create a new instance of the diskfiledestinationoptions class and 
     ' set variable called crExportOptions to the exportoptions class of the reportdocument. 
     crDiskFileDestinationOptions = New DiskFileDestinationOptions() 
     crExportOptions = crReportName.ExportOptions 

     'Set this file as the filename property for the DestinationOptions class 
     crDiskFileDestinationOptions.DiskFileName = ExportFile 

     'set the required report ExportOptions properties 
     With crExportOptions 
      .DestinationOptions = crDiskFileDestinationOptions 
      .ExportDestinationType = ExportDestinationType.DiskFile 
      .ExportFormatType = ExportFormatType.PortableDocFormat 
     End With 
    End Sub 
End Class 
End Namespace 
1
DataTable _table = RetObj.EgpReceipt_PrintFC(DummId); 

rptDoc.Load(Server.MapPath("EgpReceiptPrintFC.rpt")); 
rptDoc.SetDataSource(_table); 

rptDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, HttpContext.Current.Response, false, "Redeemed"); 
相关问题