我有一个名为 ReportRepository 的对象,它将生成的报告存储到数据库中。我想让用户能够查看这些报告,因此我将数据拉回字节数组中。下面是我用来保存报告和查看报告的逻辑的代码片段。当我尝试在第二种方法中加载报表时,页面抛出以下异常:“不支持的操作。由 JRC 引擎处理的文档无法在 C++ 堆栈中打开。” 我只想查看我存储的报告,这样做的正确方法是什么?
编辑:我还想补充一点,我已经将第一个方法更改为 ExportToHTTPResponse 而不是导出到 Stream 只是为了确保报告实际上是在浏览器中正确生成的。我可以确认它正在生成并且 Chrome 可以很好地查看 PDF。
public static void GenerateReport()
{
ReportDocument report = new ReportDocument();
string strRptPath = System.Web.HttpContext.Current.Server.MapPath("~/") + "Reports//" + "ProgressReport.rpt";
report.Load(strRptPath);
report.VerifyDatabase();
Stream pdfStream = report.ExportToStream(ExportFormatType.PortableDocFormat);
byte[] arr = new byte[pdfStream.Length];
pdfStream.Read(arr, 0, (int)pdfStream.Length);
ReportModel model = new ReportModel();
model.ReportData = arr;
model.ReportName = "TestReport";
ReportRepository repo = new ReportRepository();
repo.AddReport(model);
}
public static void ViewStoredReport(string id)
{
ReportDocument report = new ReportDocument();
ReportModel model = new ReportModel();
ReportRepository repo = new ReportRepository();
model = repo.LoadReport(id);
string strRptPath = System.Web.HttpContext.Current.Server.MapPath("~/") + "Reports//" + "ProgressReport.rpt";
FileStream oFileStream = new FileStream(strRptPath, FileMode.Create);
oFileStream.Write(model.ReportData, 0, model.ReportData.Length);
oFileStream.Close();
oFileStream.Dispose();
report.Load(strRptPath);
report.ExportToHttpResponse(ExportFormatType.PortableDocFormat, null, false, "progressreport");
}