silverlight4 beta版本的打印,注意不是正式版,正式版已经变了


这篇文章标题是我的,内容不是我的

******************************************************

微软于PDC2009上发布Silverlight 4 Beta版,微软在Silverlight 4版本中处理了约8000个的Silverlight终端用户的请求,加入了一系列另开发人员兴奋的新特性,最突出的主要体现在几个方面:

开发工具增强:Visual Studio 2010具有可视化的设计工具,创建项目时可以选择运行时版本是3.0还是4.0,BLEND4加入XAML和C#代码全方位智能感知功能、XAML的样式应用更为易用等。

摄像头与MIC硬件支持:可以用极少量的代码实现启用用户本机的WebCam和Mic,并可进行本地录制。

报表打印支持:报表打印问题在Silverlight4中得到的较好的解决。

更强大的基础类控件(RichTextBox、DataGrid增强版):富文本控件RichTextBox和具有可粘贴、排序功能的DataGrid被加入。

WCF增强:终于支持TCP通讯,比较HTTP提升3-5倍,限于4502-4534端口。

兼容性增强:对Google的Chrome浏览器的支持。

MEF支持:MEF全称为Managed Extensibility Framework,译为“托管扩展框架”,支持创建大型复杂的应用程序。

运行速度提升:启动速度和渲染速度较前个版本提升约2倍左右。

DRM增强:支持PlayReady,可以对视频和音频的播放进行的保护,补充了对H.264的DRM保护。

其它增强:本地文件读写、鼠标右键事件支持、剪粘板支持。





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

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

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


代码
XAML:

1<Gridx:Name="LayoutRoot"Background="White">
2<Grid.RowDefinitions>
3<RowDefinitionHeight="*"/>
4<RowDefinitionHeight="40"/>
5</Grid.RowDefinitions>
6<!--简单的报表-->
7<BorderBorderBrush="Black"BorderThickness="1">
8<Gridx:Name="reportGrid"Grid.Row="0"ShowGridLines="True">
9<Grid.Resources>
10<StyleTargetType="TextBlock">
11<SetterProperty="VerticalAlignment"Value="Center"/>
12<SetterProperty="HorizontalAlignment"Value="Center"/>
13</Style>
14</Grid.Resources>
15<Grid.RowDefinitions>
16<RowDefinitionHeight="30"/>
17<RowDefinitionHeight="30"/>
18<RowDefinitionHeight="30"/>
19<RowDefinitionHeight="30"/>
20<RowDefinitionHeight="30"/>
21</Grid.RowDefinitions>
22<Grid.ColumnDefinitions>
23<ColumnDefinitionWidth="100"/>
24<ColumnDefinitionWidth="200"/>
25<ColumnDefinitionWidth="300"/>
26</Grid.ColumnDefinitions>
27<TextBlockText="产品编号"Grid.Row="0"Grid.Column="0"/>
28<TextBlockText="产品名称"Grid.Row="0"Grid.Column="1"/>
29<TextBlockText="产品大类"Grid.Row="0"Grid.Column="2"/>
30<TextBlockText="1"Grid.Row="1"Grid.Column="0"/>
31<TextBlockText="数码相机"Grid.Row="1"Grid.Column="1"/>
32<TextBlockText="相机"Grid.Row="1"Grid.Column="2"/>
33<TextBlockText="2"Grid.Row="2"Grid.Column="0"/>
34<TextBlockText="笔记本电脑"Grid.Row="2"Grid.Column="1"/>
35<TextBlockText="电脑"Grid.Row="2"Grid.Column="2"/>
36</Grid>
37</Border>
38<!--打印按钮控件-->
39<Buttonx:Name="btnPrint"Grid.Row="1"Click="btnPrint_Click"
40Width="100"Height="25"Content="打印报表"/>
41</Grid>
如图所示。



C#:

1publicPrintSample()
2{
3InitializeComponent();
4this.Loaded+=newRoutedEventHandler(PrintSample_Loaded);
5}
6
7voidPrintSample_Loaded(objectsender,RoutedEventArgse)
8{
9//创建打印文档对象
10pd=newSystem.Windows.Printing.PrintDocument();
11//创建打印事件,用于指定打印的文档对象作用的对象
12pd.PrintPage+=newEventHandler<System.Windows.Printing.PrintPageEventArgs>(pd_PrintPage);
13}
14
15voidpd_PrintPage(objectsender,System.Windows.Printing.PrintPageEventArgse)
16{
17//指定打印文档对象的页面
18e.PageVisual=reportGrid;
19}
20privateSystem.Windows.Printing.PrintDocumentpd;
21privatevoidbtnPrint_Click(objectsender,RoutedEventArgse)
22{
23//定义打印的文档名称
24pd.DocumentName="产品报表";
25//调用打印方法,开始打印
26pd.Print();
27}



运行结果如图所示。



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



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

优质内容筛选与推荐>>
1、DevExpress控件之LookupEdit,ComboBoxEdit
2、命令行配置ubuntu中的网络环境
3、SlidingMenu Demo
4、linux系统编程之信号(三):信号安装、signal、kill,arise讲解
5、微软面试100题2010年版全部答案集锦(含下载地址)


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn