代码改变世界

Silverlight打印解决方案2.1正式发布(支持打印预览、页面设置(横向纵向,页边距,纸张大小、字体大小)、自动分页和多页连续打印)

2012-07-18 17:44  slmk  阅读(4207)  评论(5编辑  收藏  举报

此次版本更新,主要是针对用户的反馈意见进行的。本着尽量多写Demo,少写文档的原则。毕竟文档千言,不如代码一行,关键是我语言表达能力也不行啊!:)

主要实现以下新功能:

1、不弹出打印对话框(需要提升的权限,只支持Silverlight 5):

Silverlight 5支持使用默认打印机直接打印,而不弹出打印对话框。但是,需要用户权限提升,如果是OOB浏览器外应用的话只需要两步:

你的应用程序项目属性,中勾选:

点击"浏览器外设置",勾选:

如果是浏览器内运行的程序,需要设置成浏览器内受信任的应用程序,参见我的另一篇文章:企业内部使用Silverlight5浏览器内受信任的应用程序

调用很简单:

Report.Print(true); //传参数true即可

2、设置打印纸张大小和方向(需要提升的权限)

silverlight完全受信任运行时,可以通过平台调用PInvoke做任何事情,当然包括改变打印纸张大小和方向。

3、增加多个回调函数,让用户对打印过程有更多控制,有更多自由发挥的空间。

例如:1)实现“本页小计”功能,可以通过“PrintPageFooterCallBack”回调,在页脚添加:

甚至可以在表体最后一行添加:

2)通过“PrintReportFooterCallBack”,可以在报表的最后打印图表等任何东西,并实现自动分页。

4、从单独的文件中,或者从字符串中加载报表模板:

有时我们可能需要将报表定义放到单独的文件中,或者从后台加载报表定义,然后绑定数据源。详情参见Demo-“动态加载表模板”

5、自定义表体:

通常情况下,我们的表体是二维表格的形式。如果你的表体不是,例如是一条记录一个表。这可以通过自定义项模板实现,同样可以实现自动分页。其实这不是什么新功能,只是Demo中没有演示。详情可参见我的另一篇blog:Silverlight打印解决方案2.0之如何自定义表体

6、套打:

其实只要对Silverlight的数据绑定熟悉的话,可以很轻松的实现套打。Demo中有两个例子,可以参考。

7、手动分页:

支持手动插入分页符,是通过报表的ManualPager数组实现的。

8、动态表头:

如果要实现按月统计订单的功能,动态设置表头的数据源还是需要有的!

9、报表组合:

有时我们需要把几份报表合成一份打印,可以定义多个Report对象,将其组合起来就可以了!

789在一个Demo中演示——“手动分页/动态设置页头/分月份合计/报表组合”

10、动态设置表头、表体和表尾的数据模板

由于报表控件不能可视化设计,对于不熟悉Xaml的开发人员是个问题。数据模板支持动态设置,我们就可以用VS或Blend设计好模板,然后加载了。 参见Demo-套打(子报表)

11、打印预览对话框随着容器窗口的改变而改变。

预览对话框继承自ChildWindow,我们会发现当我们改变了容器窗口,例如浏览器窗口缩小或放大了,全屏预览窗口不会随之改变。此次版本更新解决了这个问题。

Bug修复:

多层表头在特殊情况下,通常是多于2层时表格线显示不对的bug。

注意:

1) 程序使用vs 2010 sp1和Silverlight 5 开发。如果不能打开解决方案,可能是没有安装Microsoft® Silverlight® 5 Tools for Visual Studio® 2010 SP1。

安装Microsoft® Silverlight® 5 Tools for Visual Studio® 2010 SP1

2) 如果如果源代码编译出错,可能是没有安装Silverlight Toolkit

安装Silverlight 5 toolkit

获取全部源代码

购买以前版本的用户请注意查收是否收到此次更新的源代码,您的支持就是我的动力!


兼容历史版本:

Silverlight打印解决方案2.0

Silverlight打印解决方案1.0