我们之前发布过一些文章讨论 ActiveReport 在 Silverlight 工程中的使用方法。我们知道使用 SilverLight Viewer 可以在 Silverlight 工程中浏览报表文件。但是实现其他 feature 对我们来说是一个值得讨论的话题。导出报表文件到 PDF, Excel, HTML, TIFF, Text 就是其中之一。
关于怎样在 Silverlight 工程中浏览报表,请参考以下步骤:
关于怎样在 Silverlight 工程中浏览报表,请参考以下步骤:
1. 在 web Application 中创建报表(Rpx 或 Code based 模板)。
2. 在 Silverlight 工程中使用 AR Silverlight Viewer 加载报表。
关于加载报表到Silverlight Viewer 中的方法可以参考帮助文档“To bind a report to the ActiveReports Silverlight Viewer”章节。现在在Silverlight Viewer 中已经呈现出了我们的报表。我们通常会导出报表到PDF, Excel, and HTML 等格式文件。现在问题出现了,我们没有提供在 Silverlight 程序中导出文件的接口。现有导出文件接口只在 Web 和 WinForm 工程中适用。即使我们可以在 Silverlight 工程中和文件的 document 交互。我们也无法导出报表。下面是导出方法:
1. 我们通过 字节流的方式从 server 端传递报表到 Silverlight 工程中。下面是加载报表代码:
Silverlight 端:
- private void LoadReport_Click(object sender, RoutedEventArgs e)
- {
- this.viewer1.ViewModel.ReportPath ="../SampleReport.aspx?OutPutFormat=None";
- }
复制代码
Server 端代码如下:
- protected void Page_Load(object sender, EventArgs e)
- {
- MySampleReport Report = new MySampleReport();
- if (Request.QueryString["OutPutFormat"] == "None")
- {
- CrossTab.Run();
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
- CrossTab.Document.Save(ms);
- Response.BinaryWrite(ms.ToArray());
- Response.End();
- }
- }
复制代码
2. 现在报表已经加载到了Silverlight Viewer 中,接下来我们添加 Button 到silverlight viewer 中,在 button 的click 事件中使用以下代码导航到 Server 端页面。代码如下:
- protected void Page_Load(object sender, EventArgs e)
- {
- MySampleReport Report = new MySampleReport();
- if (Request.QueryString["OutPutFormat"] == "None")
- {
- Report.Run();
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
- Report.Document.Save(ms);
- Response.BinaryWrite(ms.ToArray());
- Response.End();
- }
- }
复制代码
3. 在我们调用的页面中需要实现导出报表的功能,通过传递的 QueryString 来判断报表导出类型。代码如下:
- if (Request.QueryString["OutPutFormat"] == "PDF")
- {
- System.IO.MemoryStream m_stream = new System.IO.MemoryStream();
- Report.Run();
- pdfExport1.Export(Report.Document, m_stream);
- m_stream.Position = 0;
- Response.ContentType = "application/pdf";
- Response.AddHeader("content-disposition", "inline;filename=ReportExport.pdf");
- Response.BinaryWrite(m_stream.ToArray());
- Response.End();
- }
复制代码
截图:
示例代码:
|