2010-06-30 81 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"); 
相關問題