我在 .NET 2.0 asp.net 网站中使用水晶报表从报表创建 PDF。然后我想将报告流式传输到浏览器,我已经知道该怎么做。我不知道该怎么做是针对将保存 PDF 的对象标签。有人知道如何使用 javascript 或任何其他方式在 HTML 中执行此操作吗?
提前感谢您提供的任何帮助。
我在 .NET 2.0 asp.net 网站中使用水晶报表从报表创建 PDF。然后我想将报告流式传输到浏览器,我已经知道该怎么做。我不知道该怎么做是针对将保存 PDF 的对象标签。有人知道如何使用 javascript 或任何其他方式在 HTML 中执行此操作吗?
提前感谢您提供的任何帮助。
在找出我必须做的事情后,我想回来回答这个问题。我必须创建一个单独的 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>