2017-08-25 20 views
0

レポートを作成するメソッドがあります。サーバー上でストリームを生成し、それをtmpファイルに保存します。サービスでFastReportのStreamから作成したファイルからレポートをロード

public virtual void Build(ReportType reportType, ReportParameters parameters) 
{ 
     Export = reportType.Id == MaterialReportIds.WarehouseBalanceDynamic; 

     var tempFileName = Path.GetTempFileName(); 
     try { 
      ServiceManager<IMaterialsReportsDataService>.Invoke(service => 
      { 
       using (var stream = service.BuildReport(reportType, parameters)) { 
        using (var fileStream = File.Create(tempFileName)) { 
         int buf; 
         while ((buf = stream.ReadByte()) >= 0) { 
          fileStream.WriteByte((byte)buf); 
         } 
         fileStream.Flush(); 
         fileStream.Close(); 
         stream.Close(); 
        } 
       } 
      }); 

      Report.LoadPrepared(tempFileName); 
     } 
     finally { 
      File.Delete(tempFileName); 
     } 
} 

:その後

public Stream BuildReport(ReportType reportType, ReportParameters parameters) { 
     IReport report = new ReportFactory(Assembly.GetExecutingAssembly()).CreateReport(reportType); 
     try { 
      report.Build(reportType, parameters); 
      MemoryStream stream = new MemoryStream(); 
      (report.Object as Stream)?.CopyTo(stream); 
      stream.Seek(0, SeekOrigin.Begin); 
      return stream; 
     } finally { 
      (report?.Object as IDisposable)?.Dispose(); 
     } 
    } 

我々はReport.LoadPrepared(path to a tmp file)を使用して、それは動作しますが、私はReport.Load(path to a tmp file)を使用しようとすると、それはしていません。なぜ誰が知っていますか?エラーはファイル形式が間違っていますが、なぜReport.LoadPrepared()が機能するのですか?

答えて

1

文書FastReportから推測すると、hereが提供されました。 ".fpx" ファイルを受け入れる一方LoadPreparedから

report.Load("report1.frx"); 

Report.LoadPrepared(this.Server.MapPath("~/App_Data/Prepared.fpx")); 

Load方法は ".FRX" ファイルを受け付け

関連する問題