2017-01-14 5 views
1

私はPDFとしてFastReportによって設計されていること.frxレポートをエクスポートする場合、または以下のコードのような交流#のWebフォームアプリケーションでファイルをエクセル:私はエクスポートエラーのasp.net C#の上でPDFにFastReportの輸出に

public static bool ShowReport(string ReportFileName, DataTable ReportData, string DBObjectName, string ExportType, out string Message, params string[] AdditionalParams) 
    { 
     FastReport.Utils.Config.WebMode = true; 
     string ReportFile = HttpContext.Current.Server.MapPath(WPResources.ReportsRoot) + string.Format("{0}_{1}.frx", ReportFileName, ExportType.ToUpper()); 

     FastReport.Report objReport = new FastReport.Report(); 
     objReport.Load(ReportFile); 
     objReport.Dictionary.Connections.Clear(); 
     System.Data.DataTable resultTable = new DataTable(); 

     objReport.RegisterData(ReportData, DBObjectName); 
     objReport.GetDataSource(DBObjectName).Enabled = true; 


     int ParamsCount = AdditionalParams.Length; 
     if ((ParamsCount % 2) != 0) 
      ParamsCount--; 

     for (int i = 0; i < ParamsCount; i += 2) 
     { 
      var DynamicControl = (objReport.FindObject(AdditionalParams[i]) as FastReport.TextObject); 
      if (DynamicControl != null) 
      { 
       DynamicControl.Text = AdditionalParams[i + 1]; 
       DynamicControl.Visible = !string.IsNullOrEmpty(AdditionalParams[i + 1]); 
      } 
     } 

     (objReport.FindObject("rptData") as FastReport.DataBand).DataSource = objReport.GetDataSource(DBObjectName); 

     string fileName = Path.GetFileNameWithoutExtension(ReportFile); 
     fileName += "_" + WPFarsiDate.Today.ToString().Replace("/", ".") + "_" + 
      DateTime.Now.Hour.ToString() + "." + 
      DateTime.Now.Minute.ToString(); 

     if (ExportType == "Excel") 
     { 
      using (MemoryStream objMemoryStream = new MemoryStream()) 
      { 
       objReport.Prepare(false); 
       FastReport.Export.OoXML.Excel2007Export objExcel2007Export = new FastReport.Export.OoXML.Excel2007Export(); 
       objExcel2007Export.OpenAfterExport = false; 
       objExcel2007Export.Export(objReport, objMemoryStream); 
       byte[] buffer = objMemoryStream.ToArray(); 
       HttpContext.Current.Response.ClearHeaders(); 
       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; 
       HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("inline;filename={0}.xlsx", fileName)); 
       HttpContext.Current.Response.BinaryWrite(buffer); 
       HttpContext.Current.Response.End(); 
      } 
     } 
     else if (ExportType == "Pdf") 
     { 
      using (MemoryStream objMemoryStream = new MemoryStream()) 
      { 
       objReport.Prepare(false); 
       FastReport.Export.Pdf.PDFExport objPDFExport = new FastReport.Export.Pdf.PDFExport(); 
       objPDFExport.EmbeddingFonts = true; 
       objPDFExport.OpenAfterExport = false; 
       objPDFExport.Export(objReport, objMemoryStream); 
       byte[] buffer = objMemoryStream.ToArray(); 
       HttpContext.Current.Response.ClearHeaders(); 
       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.ContentType = "application/octet-stream"; 
       HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.pdf", fileName)); 
       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.BinaryWrite(buffer); 
       HttpContext.Current.Response.End(); 

      } 
     } 

     Message = string.Empty; 
     return true; 
    } 

それは優れている、それはどんな問題でもなく、それは成功するでしょう。しかし、私はPDFファイルにエクスポートするとき、私はこのエラーを取得:

Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.

言及したエラーがちょうどメインサーバで発生し、ジョブがローカルホストで正常に行うことができることに留意すべきです。 誰かがこの問題の解決方法を説明できると非常に役に立ちます。

答えて

1

多くの努力の結果、問題の解決策が見つかりました。 .frxファイルで使用されるフォントはwindows/fontsフォルダではありませんでした。だから私はそこにmetionedフォントをコピーし、それは正常に動作しました。

0

デバッグを試しましたか?どの行がこのエラーをスローしますか? デスクトップ版のダイアログウィンドウはありますか?それを避けてください。

関連する問題