0

我在 .NET 2.0 asp.net 网站中使用水晶报表从报表创建 PDF。然后我想将报告流式传输到浏览器,我已经知道该怎么做。我不知道该怎么做是针对将保存 PDF 的对象标签。有人知道如何使用 javascript 或任何其他方式在 HTML 中执行此操作吗?

提前感谢您提供的任何帮助。

4

1 回答 1

1

在找出我必须做的事情后,我想回来回答这个问题。我必须创建一个单独的 aspx 页面并将其命名为 PDFView.aspx。然后我将代码添加到 PageLoad 事件中:

if (!IsPostBack)
     {
        ReportDocument rpt;
        rpt = (ReportDocument)Session["CrystalReport"];
        System.IO.Stream myStream;

        CrystalDecisions.Shared.ExportOptions myExportOptions;
        myExportOptions = myReport.ExportOptions;
        myExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
        myExportOptions.FormatOptions = new CrystalDecisions.Shared.PdfRtfWordFormatOptions();

        CrystalDecisions.Shared.ExportRequestContext myExportRequestContext = new CrystalDecisions.Shared.ExportRequestContext();
        myExportRequestContext.ExportInfo = myExportOptions;
        //SetReportParameter("pPrinterFriendly", true, (ReportClass)myReport);

        System.Web.HttpContext.Current.Response.ClearContent();
        System.Web.HttpContext.Current.Response.ClearHeaders();
        System.Web.HttpContext.Current.Response.ContentType = "application/pdf";
        myStream = myReport.FormatEngine.ExportToStream(myExportRequestContext);
        Byte[] myBuffer = new Byte[myStream.Length];
        myStream.Read(myBuffer, 0, (int)myStream.Length);
        System.Web.HttpContext.Current.Response.BinaryWrite(myBuffer);
        System.Web.HttpContext.Current.Response.Flush();

     }

我在调用 aspx 页面中创建了设置所有参数和数据源的报表对象,并将报表写入会话变量以在加载 PDFView.aspx 页面时进行检索。然后,我使用上面的代码来检索、执行报告并将报告作为二进制流“二进制 PDF”流式传输到浏览器响应流。

PDFView.aspx 页面在调用页面中被引用,对象标签如下:

<object id="pdfObj" type="application/pdf" style="width:60%;height:95%;position:relative;top:2%;left:0%;right:10%;bottom:10%;margin:0px;padding:0px;border:0px;" data="PDFView.aspx"></object>
于 2012-05-21T12:43:55.903 回答