Silverlight4 VS Flex4 打印功能大比拼


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”。


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->using System;

using System.Windows;
using System.Windows.Controls;

using System.Windows.Printing;

namespace HelloPrinter

{

public partial class MainPage : UserControl

{

public MainPage()

{

InitializeComponent();

}

private void button1_Click(object sender, RoutedEventArgs e)

{

PrintDocument printDoc = new PrintDocument();

printDoc.DocumentName = "Hello World from Silverlight";

printDoc.PrintPage += new EventHandler(printDoc_PrintPage);

printDoc.Print();

}

void printDoc_PrintPage(object sender, PrintPageEventArgs e)

{

StackPanel panel = new StackPanel() { Orientation = Orientation.Horizontal };

panel.Children.Add(new TextBlock() { Text = "Hello ",

  FontFamily = new System.Windows.Media.FontFamily("Arial"), FontSize = 12 });

panel.Children.Add(new TextBlock() { Text = "World",

  FontFamily = new System.Windows.Media.FontFamily("Arial"), FontSize = 12 });

e.PageVisual = panel;

e.HasMorePages = false;

}

}

}

  当点击按钮后,会调用打印事件句柄,在打印过程中,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”。


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->protected function button1_clickHandler(event:MouseEvent):void

{

var job : FlexPrintJob = new FlexPrintJob();

job.printAsBitmap = false;

if(job.start()) {

var group : HGroup = new HGroup();

group.height = job.pageHeight;

group.width = job.pageWidth;

var text : SimpleText = new SimpleText();

text.text = "Hello ";

text.setStyle("fontFamily", "Arial");

text.setStyle("fontSize",12);

group.addElement(text);

text = new SimpleText();

text.setStyle("fontFamily", "Arial");

text.setStyle("fontSize",12);

text.text = "World";

group.addElement(text);

addElement(group);

job.addObject(group, FlexPrintJobScaleType.NONE);

job.send();

removeElement(group);

}

  对比上面的两组打印代码可以看出Flex实现打印需要多设置一些参数,主要是因为:

  1. 在Flex打印中,需要设置打印格式,是位图模式,还是矢量图模式;

  2. Flex不支持自动设置打印对象在打印页面中的宽和高;

  综上所述,我们可以看出Flex的打印功能要比Silverlight的打印功能更加健全,Flex打印功能中的打印高质量的矢量图和自动分页是两个主要亮点,而当前Silverlight 4中自动分页是将要打印视图对象切割成两部分实现打印。而Silverlight 4中打印功能的全编程模式也是Silverlight的亮点。从微软对Silverlight的定位方向来看,相信在不久的将来,Silverlight的打印功能会更加的强大和完善。

  Flex 打印效果:

  Flex矢量图打印效果:

  Silverlight 打印效果:



相关阅读:
PHP环境快读搭建绿色软件包PHPnow
统计分析Web服务器日志
MSSQL 生成日期列表代码
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
一个很酷的拖动层的js类,兼容IE及Firefox
初学javascript之cookie篇(4)
发现的以前不知道的函数
滚动条代码生成器
用ASP显示ACCESS数据库的的GIF图象
编译KDE4 for FreeBSD
javascript 模拟select下拉列表特效
Discuz5.5.0代码高亮显示+运行代码框合成插件 下载
CSS hacks与争议
左侧固定宽度,右侧自适应宽度的CSS布局
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 天宫庄园一日游 小学六年级作文600字:我喜欢读书 10月16日世界粮食日讲话稿 经典金工实习报告范文 感恩心:最感人的一句话 童年轶事作文500字 珍惜时间,从我做起 倒追来的幸福要珍惜 无泪[见明。]作文1500字 爱美的小青蛙 做你的红颜 内科护理年度总结 消失和被掏空的古村落 我当上了小报童啦! 经典的英语句子爱情语句中英文版 唯美英文励志句子 风,它知道 总有一段距离写满伤感 等待ing....作文800字 我们去大舅家做客作文150字 2015年入团申请书范文600字范文 长篇小说《蛋壳》第一八九节 电大社会实践报告 拉扯不断地回忆 【精品】新入科护士培训计划 在儿子婚礼上的讲话 谢爱玲同志(环保局局长)事迹材料_事迹材料 匆匆g作文700字 默默的教导让我学会了感恩650字 小学六年级作文11850字:香港六日游 碎悟 赵县一日游作文400字 写给未来自己的一封信 希望在,梦就在 高中高二作文1000字:《谁偷走了我的时间》有感 经历公证书样本 关于爱情的经典句子:生活中许多情感都是败在距离上 中层干部聘用及考核管理办法 【原创】休闲甘棠苑 马云斯坦福大学演讲:我们在改变中国 维修电工工作总结 下雪作文800字 心灵的树 停电作文 你是我红尘中的牵绊 骨科优质护理工作计划 妇孺皆知造句 给老爸的父亲节祝福语 高中高三作文1000字:猫、狗、鸟 春的进行曲作文400字

Copyright © 2016 phpStudy |