2013-08-07 164 views
2

如何使用FastReport.netasp.net導出pdf? 我想在控制器中導出文件。我嘗試了這種方式支持FastReport的網站:使用FastReport.net和asp.net導出pdf

public FileResult GetFile() 
     { 
      WebReport webReport = new WebReport(); 

      // bind data 
      System.Data.DataSet dataSet = new System.Data.DataSet(); 
      dataSet.ReadXml(report_path + "nwind.xml"); 
      webReport.Report.RegisterData(dataSet, "NorthWind"); 

      // load report 
      webReport.ReportFile = this.Server.MapPath("~/App_Data/report.frx"); 

      // prepare report 
      webReport.Report.Prepare(); 

      // save file in stream 
      Stream stream = new MemoryStream(); 
      webReport.Report.Export(new PDFExport(), stream); 
      stream.Position = 0; 

      // return stream in browser 
      return File(stream, "application/zip", "report.pdf"); 
     } 

但隨後pdf的大小始終爲0字節。

有人知道我的問題的解決方案嗎?

回答

5

好吧,現在我找到了解決方案。只需使用正常的Report(不是WebReport)並將WebMode設置爲true即可。 pdf-Export上的其他設置只是爲了好玩。

所以,這將這樣的伎倆:

public FileResult GetFile(Dataset dataset1) 
{ 
    FastReport.Utils.Config.WebMode = true; 
    Report rep = new Report(); 
    rep.Load(Request.PhysicalApplicationPath + "App_Data/report.frx");  

    rep.RegisterData(dataset1); 

    if (rep.Report.Prepare()) 
    { 
     // Set PDF export props 
     FastReport.Export.Pdf.PDFExport pdfExport = new FastReport.Export.Pdf.PDFExport(); 
     pdfExport.ShowProgress = false; 
     pdfExport.Subject = "Subject"; 
     pdfExport.Title = "xxxxxxx"; 
     pdfExport.Compressed = true; 
     pdfExport.AllowPrint = true; 
     pdfExport.EmbeddingFonts = true; 

     MemoryStream strm = new MemoryStream(); 
     rep.Report.Export(pdfExport, strm); 
     rep.Dispose(); 
     pdfExport.Dispose(); 
     strm.Position = 0; 

     // return stream in browser 
     return File(strm, "application/pdf", "report.pdf"); 
    } 
    else 
    { 
     return null; 
    } 
} 

這是一個遺憾的是,這樣的代碼模板是錯在開發商的官方網站。

0

對我的作品在2017.1

public void GetFile() 
    { 
     SetReport(); 
     webReport.ExportPdf(); 
    } 

    public void GetPrint() 
    { 
     SetReport(); 
     webReport.Prepare(); 
     webReport.PrintPdf(); 
    }