none
风云的银光志Silverlight4.0教程之打印报表和图形 RRS feed

  • 常规讨论

  •       在Silverlight4之前我们通常可以用在Silverlight中CALL一下JavaScript脚本来进行基于普通网页的打印方法,但是这种无论是打印方式效果还是精确度控制上都不能让人十分满意。

          对于一个Silverlight来说,需要打印的内容往往可能是整个网页的一部页,或是整个Silverlight应用程序的某个局部内容,如果仅仅使用JavaScript的网页打印的话,是无法满足Silverlight应用程序中打印的需求,不过这个问题终于在Silverlight 4.0中得到了比较完美的解决。Silverlight 4运行时中引入了System.Windows.Printing命名空间,这个命名空间中包含一个名为PrintDocument的类,它可以完成Silverlight应用程序中有“针对性”的打印任务。

         下面我们用GRID制作一个简单的报表。

    如图所示。

    C#:

           public PrintSample()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(PrintSample_Loaded);
            }

            void PrintSample_Loaded(object sender, RoutedEventArgs e)
            {
                //创建打印文档对象
    10             pd = new System.Windows.Printing.PrintDocument();
    11             //创建打印事件,用于指定打印的文档对象作用的对象
    12             pd.PrintPage += new EventHandler<System.Windows.Printing.PrintPageEventArgs>(pd_PrintPage);
    13         }
    14
    15         void pd_PrintPage(object sender, System.Windows.Printing.PrintPageEventArgs e)
    16         {
    17             //指定打印文档对象的页面
    18             e.PageVisual = reportGrid;
    19         }
    20         private System.Windows.Printing.PrintDocument pd; 
    21         private void btnPrint_Click(object sender, RoutedEventArgs e)
    22         {
    23             //定义打印的文档名称
    24             pd.DocumentName = "产品报表";
    25             //调用打印方法,开始打印
    26             pd.Print();
    27         }

     

    运行结果如图所示。

    image

          使用后台代码来实现打印方法,主要依靠System.Windows.Printing.PrintDocument这个类来完成,PrintDocument具有PrintPage事件,你需要创建这个事件的事件处理方法,并在这个事件里指定打印文档的对象页面,在这里就是reportGrid的GRID控件,其中DocumentName是你要打印文档的名称,最终调用Print方法开始打印,并显示打印窗口,如果你没有安装打印机,系统会提示你先安装打印机,如图所示。

    image

          PrintPage事件中具有StartPrint、EndPrint事件和HasMorePages属性,StartPrint和EndPrint事件是在打印开始前和打印结束后引发,而HasMorePages属性是一个bool类型的属性,当PrintPage事件多次运行时,如果值为true情况下,事件将等待至HasMorePages为false时才继续引发下一次事件。这里需要说明的是,PrintDocument不仅支持GRID对象,连Image对象也可以通过PrintDocument打印出来。

    由于帖子字数限制,完整代码请看原贴:http://blog.csdn.net/dotfun/archive/2010/02/12/5307058.aspx

    风云的Silverlight4.0原创系列教程:http://blog.csdn.net/dotfun/category/647012.aspx


    My blog: http://blog.csdn.net/dotfun http://dotfun.cnblogs.com

    My contact: QQ:372900288 E-mail:372900288@qq.com msn:sellnet007@hotmail.com


    《银光志--Silverlight 3.0开发详解与最佳实践》
    2010年2月20日 2:42
    版主