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()
が機能するのですか?