我们之前发布过一些文章讨论 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();  
    }  
复制代码

截图:


示例代码:

SLV Export.zip (989.85 K, 下载次数:3)