0

C# でコードを実行して、Crystal Reports でレポートを生成し、ブラウザで PDF で開きます。

ユーザーがシステムにログインして、最初にレポートの 1 つを生成しようとすると、処理に時間がかかります...しかし、最初のレポートを生成した後、他のレポートは自動的に生成されます!

誰かが私が何をすべきか知っていますか? 私のコードは次のとおりです。

ボタンをクリックして PDF を生成すると、次のようになります。

ReportDocument Rel = new ReportDocument();
Rel.Load(Server.MapPath("../Reports/Report1.rpt"));
Rel.SetParameterValue("@Id", Id);

Session.Add("Report", Rel);
string _open = "window.open('Report.aspx');";
ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), _open, true);

「Report.aspx」ページ:

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["Report"] != null)
                OpenPDF((ReportDocument)Session["Report"]);
        }
    }

private void OpenPDF(ReportDocument Rel)
{
    MemoryStream stream = (MemoryStream)Rel.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/pdf";
    Response.BinaryWrite(stream.ToArray());
    Response.End();
}

ありがとう!

4

1 に答える 1

1

レポート ファイルに何が含まれているか、エクスポートしたページ数よりも多くのページを処理しているかどうかはわかりませんが、ユーザーのランタイムをプリロードして、後続のレポート レンダリングの実行時間がそれほど目立たないようにすることができます。

編集:

空白のレポートを作成し、レポートを生成する前に移動する前のページの Page_Load など、どこかにロードします。ホームページまたはサブセクション。その後、レポートを閉じて破棄します。また、使用していない Crystal Reports アセンブリをプロジェクト参照から削除します。

于 2012-05-09T21:00:58.720 に答える