Silverlight 4对比Flex 4打印功能

简介:
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 };
  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"), FontSize = 12 });
  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()方法,这时会弹出提示窗口,询问是否开始打印,选择确定,将开始打印;
步骤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", "Arial");
  16:                     text.setStyle("fontSize",12);
  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);
  26:                 }
 
 对比上面的两组打印代码可以看出Flex实现打印需要多设置一些参数,主要是因为:
1. 在Flex打印中,需要设置打印格式,是位图模式,还是矢量图模式;
2. Flex不支持自动设置打印对象在打印页面中的宽和高;
综上所述,我们可以看出Flex的打印功能要比Silverlight的打印功能更加健全,Flex打印功能中的打印高质量的矢量图和自动分页是两个主要亮点,而当前Silverlight 4中自动分页是将要打印视图对象切割成两部分实现打印。而Silverlight 4中打印功能的全编程模式也是Silverlight的亮点。从微软对Silverlight的定位方向来看,相信在不久的将来,Silverlight的打印功能会更加的强大和完善。
 
Flex 打印效果: 
 
 
Flex矢量图打印效果:
 
Silverlight 打印效果:

本文转自 

冷秋寒 51CTO博客,原文链接:http://blog.51cto.com/kevinfan/271746,如需转载请自行联系原作者

相关文章
|
前端开发 数据可视化 程序员
|
Web App开发 JavaScript 前端开发
Web页面上工作流设计器(silverlight/Flex/Javascript/java Workflow Designer)
最近需要做一个web页面的工作流设计器,调研了一下,具体内容汇总如下,可做大家的使用选型参考。 Silverlight的Workflow Designer ShareDesigner http://sharedesigner.
2011 0
|
Windows 内存技术
Flash/Flex学习笔记(32):播放音乐并同步显示lyc歌词(适用于Silverlight)
题外话:个别朋友总是问我同样的问题,做为一名c#/silverlight程序员为啥还要学flash ? 回 答:看日本片时,就不能对照看欧美的么? 不体会日本的细腻,又怎能感觉到欧美的粗放;同样都是web相关的技术,不必报门户之见;何况这二者有很多可以相互借鉴的东西。
1336 0
|
前端开发 数据可视化 程序员
Flex/Silverlight的技术比较
别人博客上看见的,一文下去,引起口水大战,其实仁者见仁,智者见智,每种语言都不可能是完善的,扬长避短才是王道。 基于个人的使用经验,我从语言、框架、开发环境和运行环境四个方面对Flex和Silverlight这两门技术做一个比较,自己认为这个比较还是比较全面的。
1114 0
你知道了Flex能干什么后,你还应该知道 Silverlight 能干什么
你知道了Flex能干什么后,你还应该知道 Silverlight 能干什么  前几天看到了dengjie前辈 的“如果你不知道 Flex 能干什么” 提到了一个“Tour de Flex” 的Air应用,几乎包含了所有的主流的Flex控件。
880 0

热门文章

最新文章