Silverlight4和Flex4打印功能在線PK
本文和大家重點討論一下Silverlight4和Flex4打印功能有什么區別和聯系,許多曾經在Flex下支持的功能,現在Silverlight下已經可以實現,而且還有一些新的功能,Flex無法實現。
Silverlight4和Flex4打印功能大比拼
Silverlight作為一門新技術推出已經三年,在Silverlight早期版本,大家都認為Silverlight的功能無法和Flex進行對比,更是無法超越Flex,在2009年11月,微軟推出了Silverlight4測試版本,以其強大的功能又一次吸引了眾多開發人員的眼球,許多曾經在Flex下支持的功能,現在Silverlight下已經可以實現,而且還有一些新的功能,Flex無法實現。例如,Silverlight4的COM組件交互,從桌面拖拉對象到Silverlight應用等功能。為了使更多的開發人員了解Silverlight開發平臺,我將對Silverlight4和Flex4進行一系列的對比,希望能幫助開發人員了解更多Silverlight新功能。本文,將對Silverlight4和Flex4的打印功能進行對比。
Silverlight4打印功能
Silverlight4的打印功能石油PrintDocument類進行控制,實現打印功能需要按照以下步驟:
步驟1:建立PrintDocument對象;
步驟2:在PrintDocument對象中設置文檔名;
步驟3:添加事件句柄到PrintPage事件中,同時也可以添加到StartPrint和EndPrint事件中;
步驟4:在PrintPage打印事件中,建立一個打印窗口,該窗口將作為父窗口出現,可以添加想打印的內容或者控件到該打印窗口。例如建立一個StackPanel,然后在StackPanel中添加想打印的內容控件;
步驟5:在打印時,如果HasMorePages為True,說明支持多個頁面進行打印;
步驟6:重復4和5步驟,就可以實現完整的Silverlight4打印功能;
看起來這些步驟是不是很簡單。下面提供一個例程代碼,點擊打印按鈕后,會打印出“HelloWorld”。
- usingSystem;
- usingSystem.Windows;
- usingSystem.Windows.Controls;
- usingSystem.Windows.Printing;
- namespaceHelloPrinter
- {
- publicpartialclassMainPage:UserControl
- {
- publicMainPage()
- {
- InitializeComponent();
- }
- privatevoidbutton1_Click(objectsender,RoutedEventArgse)
- {
- PrintDocumentprintDoc=newPrintDocument();
- printDoc.DocumentName="HelloWorldfromSilverlight";
- printDoc.PrintPage+=newEventHandler(printDoc_PrintPage);
- printDoc.Print();
- }
- voidprintDoc_PrintPage(objectsender,PrintPageEventArgse)
- {
- StackPanelpanel=newStackPanel(){OrientationOrientation=Orientation.Horizontal};
- panel.Children.Add(newTextBlock(){Text="Hello",
- FontFamily=newSystem.Windows.Media.FontFamily("Arial"),FontSize=12});
- panel.Children.Add(newTextBlock(){Text="World",
- FontFamily=newSystem.Windows.Media.FontFamily("Arial"),FontSize=12});
- e.PageVisual=panel;
- e.HasMorePages=false;
- }
- }
- }
當點擊按鈕后,會調用打印事件句柄,在打印過程中,Silverlight將自動設置打印窗口的寬和高,可以通過PrintableArea屬性獲取在打印事件中獲取打印頁面的寬和高。#p#
Flex4打印功能
Flex4的打印功能和Silverlight4打印功能步驟很相似,但是實現不同,Flex4的打印功能不是事件驅動,基本步驟如下:
步驟1:建立FlexPrintJob對象,可以把該對象看作Silverlight的PrintDocument;
步驟2:使用一個布爾變量控制要打印的圖片格式,例如是打印矢量圖還是打印位圖;
步驟3:調用FlexPrintJob中的Start()方法,這時會彈出提示窗口,詢問是否開始打印,選擇確定,將開始打印;
步驟4:建立一個打印對象,并添加這個打印對象到現實列表中;
步驟5:使用FlexPrintJob中的addObject()添加對象到打印頁面中;
步驟6:調用FlexPrintJob中的send()方法,對添加的打印頁面進行打印;
步驟7:打印后,刪除已經打印的視圖對象;
下面提供按鈕事件代碼,點擊按鈕后,會打印出“HelloWorld”。
- protectedfunctionbutton1_clickHandler(event:MouseEvent):void
- {
- varjob:FlexPrintJob=newFlexPrintJob();
- job.printAsBitmap=false;
- if(job.start()){
- vargroup:HGroup=newHGroup();
- group.height=job.pageHeight;
- group.width=job.pageWidth;
- vartext:SimpleText=newSimpleText();
- text.text="Hello";
- text.setStyle("fontFamily","Arial");
- text.setStyle("fontSize",12);
- group.addElement(text);
- text=newSimpleText();
- 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打印功能中的打印高質量的矢量圖和自動分頁是兩個主要亮點,而當前Silverlight4中自動分頁是將要打印視圖對象切割成兩部分實現打印。而Silverlight4中打印功能的全編程模式也是Silverlight的亮點。從微軟對Silverlight的定位方向來看,相信在不久的將來,Silverlight的打印功能會更加的強大和完善。
【編輯推薦】
- Flex4教程中添加事件的3種方法
- 常用FlexBuilder快捷鍵用法指導
- Flex框架Riawave的定制應用
- 技術前沿 Flex2.0 從零開始實現文件上傳
- FlexBuilder開發方法及特點解析