4

生成されたレポートをデータベースに保存しているReportRepositoryという名前のオブジェクトがあります。ユーザーがこれらのレポートを表示できるようにしたいので、データをバイト配列に戻します。以下は、レポートを保存してレポートを表示するために使用しているロジックのコードスニペットです。2番目の方法でレポートを読み込もうとすると、ページに次の例外がスローされます:「サポートされていない操作。JRCエンジンによって処理されたドキュメントをC++スタックで開くことができません。」保存したレポートを表示したいのですが、これを行う正しい方法は何ですか?

編集:レポートが実際にブラウザーで正しく生成されていることを確認するために、最初のメソッドをStreamにエクスポートするのではなくExportToHTTPResponseに変更したことも追加したいと思います。生成されており、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");
    }
4

0 に答える 0