Silverlight作为一门新技术推出已经三年,在Silverlight早期版本,大家都认为Silverlight的功能无法和Flex进行对比,更是无法超越Flex,在2009年11月,微软推出了Silverlight 4测试版本,以其强大的功能又一次吸引了众多开发人员的眼球,许多曾经在Flex下支持的功能,现在Silverlight下已经可以实现,而且还有一些新的功能,Flex无法实现。例如,Silverlight 4的COM组件交互,从桌面拖拉对象到Silverlight应用等功能。为了使更多的开发人员了解Silverlight开发平台,我将对Silverlight 4和Flex 4进行一系列的对比,希望能帮助开发人员了解更多Silverlight新功能。本文,将对Silverlight 4和Flex 4的打印功能进行对比。
Silverlight 4打印功能
Silverlight 4的打印功能石油Printdocument类进行控制,实现打印功能需要按照以下步骤:
步骤1:建立Printdocument对象;
步骤2:在Printdocument对象中设置文档名;
步骤3:添加事件句柄到PrintPage事件中,同时也可以添加到StartPrint和EndPrint事件中;
步骤4:在PrintPage打印事件中,建立一个打印窗口,该窗口将作为父窗口出现,可以添加想打印的内容或者控件到该打印窗口。例如建立一个StackPanel,然后在StackPanel中添加想打印的内容控件;
步骤5:在打印时,如果HasMorePages为True,说明支持多个页面进行打印;
步骤6:重复4和5步骤,就可以实现完整的Silverlight 4打印功能;
看起来这些步骤是不是很简单。下面提供一个例程代码,点击打印按钮后,会打印出“Hello World”。
1: using System;
2: using System.windows;
3: using System.windows.Controls;
4: using System.windows.Printing;
5:
6: namespace HelloPrinter
7: {
8: public partial class MainPage : UserControl
9: {
10: public MainPage()
11: {
12: InitializeComponent();
13: }
14:
15: private voID button1_Click(object sender,RoutedEventArgs e)
16: {
17: Printdocument printDoc = new Printdocument();
18: printDoc.documentname = "Hello World from Silverlight";
19: printDoc.PrintPage += new EventHandler<PrintPageEventArgs>(printDoc_PrintPage);
20: printDoc.Print();
21: }
22:
23: voID printDoc_PrintPage(object sender,PrintPageEventArgs e)
24: {
25: StackPanel panel = new StackPanel() { OrIEntation = OrIEntation.Horizontal };
@H_502_187@ 26: panel.Children.Add(new TextBlock() { Text = "Hello ", FontFamily = new System.windows.Media.FontFamily("Arial"),FontSize = 12 });
27: panel.Children.Add(new TextBlock() { Text = "World", FontFamily = new System.windows.Media.FontFamily("Arial"),monospace; direction: ltr; color: black; Font-size: 8pt; border-style: none; padding: 0px;"> 28: e.PageVisual = panel;
29: e.HasMorePages = false;
30: }
31: }
32: }
当点击按钮后,会调用打印事件句柄,在打印过程中,Silverlight将自动设置打印窗口的宽和高,可以通过PrintableArea属性获取在打印事件中获取打印页面的宽和高。
Flex 4打印功能
Flex4的打印功能和Silverlight 4打印功能步骤很相似,但是实现不同,Flex 4的打印功能不是事件驱动,基本步骤如下:
步骤1:建立FlexPrintJob对象, 可以把该对象看作Silverlight的Printdocument;
步骤2:使用一个布尔变量控制要打印的图片格式,例如是打印矢量图还是打印位图;
步骤3:调用FlexPrintJob中的Start()方法,这时会d出提示窗口,询问是否开始打印,选择确定,将开始打印;
步骤4:建立一个打印对象,并添加这个打印对象到现实列表中;
步骤5:使用FlexPrintJob中的addobject()添加对象到打印页面中;
步骤6:调用FlexPrintJob中的send()方法,对添加的打印页面进行打印;
步骤7:打印后,删除已经打印的视图对象;
下面提供按钮事件代码,点击按钮后,会打印出“Hello World”。
1: protected function button1_clickHandler(event:MouseEvent):voID
2: {
3: var job : FlexPrintJob = new FlexPrintJob();
4: job.printAsBitmap = false;
5: if(job.start()) {
6: var group : HGroup = new HGroup();
7: group.height = job.pageHeight;
8: group.wIDth = job.pageWIDth;
9: var text : SimpleText = new SimpleText();
10: text.text = "Hello ";
11: text.setStyle("FontFamily","Arial");
12: text.setStyle("FontSize",12);
13: group.addElement(text);
14: text = new SimpleText();
15: text.setStyle("FontFamily",monospace; direction: ltr; color: black; Font-size: 8pt; border-style: none; padding: 0px;"> 16: text.setStyle("FontSize",monospace; direction: ltr; color: black; Font-size: 8pt; border-style: none; padding: 0px;"> 17: text.text = "World";
18: group.addElement(text);
19:
20: addElement(group);
21:
22: job.addobject(group,FlexPrintJobScaleType.NONE);
23:
24: job.send();
25: removeElement(group);
@H_502_187@ 26: }
对比上面的两组打印代码可以看出Flex实现打印需要多设置一些参数,主要是因为:
1. 在Flex打印中,需要设置打印格式,是位图模式,还是矢量图模式;
2. Flex不支持自动设置打印对象在打印页面中的宽和高;
综上所述,我们可以看出Flex的打印功能要比Silverlight的打印功能更加健全,Flex打印功能中的打印高质量的矢量图和自动分页是两个主要亮点,而当前Silverlight 4中自动分页是将要打印视图对象切割成两部分实现打印。而Silverlight 4中打印功能的全编程模式也是Silverlight的亮点。从微软对Silverlight的定位方向来看,相信在不久的将来,Silverlight的打印功能会更加的强大和完善。
Flex 打印效果:
Flex矢量图打印效果:
Silverlight 打印效果:
总结以上是内存溢出为你收集整理的Silverlight 4对比Flex 4打印功能全部内容,希望文章能够帮你解决Silverlight 4对比Flex 4打印功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)