`

Flex 4 打印预览

 
阅读更多
<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
				   xmlns:s="library://ns.adobe.com/flex/spark" 
				   xmlns:mx="library://ns.adobe.com/flex/mx"  
				   xmlns:parsley="http://www.spicefactory.org/parsley"
				  
				   close="titlewindow1_closeHandler(event)" 
				   height="{FlexGlobals.topLevelApplication.height - 100}"
				   width="100%"
				   
	
	<fx:Declarations> 
	</fx:Declarations>
	
	<fx:Script>
		<![CDATA[
			
			
			import mx.containers.Canvas;
			import mx.controls.Alert;
			import mx.core.FlexGlobals;
			import mx.core.IUIComponent;
			import mx.core.IVisualElement;
			import mx.events.CloseEvent;
			import mx.events.FlexEvent;
			import mx.managers.PopUpManager;
			import mx.printing.*;
			import mx.utils.ObjectUtil;
			
			import spark.components.List;
			[Bindable] public var racingModel : RacingModel;
			[Bindable] public var racingSearchPM : RacingSearchPM;
			[Bindable] public var raceGridHeight : int;
			[Bindable] public var greyHoundGridHeight : int;
			[Bindable] public var harnessGridHeight : int;
			public static const DEFAULT_GRID_HEIGHT:int = 100;
			public static const CLOSE_POPUP:String = "closePopup";
			private var _toBePrintData:IUIComponent;
			private var _printMulipleData:IUIComponent;
			private var printDataParent:DisplayObjectContainer;
			
			[Bindable]public var printScrollContent:Boolean=false;
			[Bindable]public var dateDisplayString:String;
			[Bindable]public var printTitle:String;
			[Bindable]public var jurisdictionID : int;
			
			private var sortedSizeWidth:Number;
			private var sortedSizeHeight:Number;
			
			/**
			 * 
			 * Function to remove Popup
			 * 
			 */
			public function onClickClose(event : MouseEvent = null) : void
			{
				this.dispatchEvent(new Event(CLOSE_POPUP));
				PopUpManager.removePopUp(this);
			}
			
			protected function imageLogo_ioErrorHandler(event:IOErrorEvent):void
			{
				// TODO Auto-generated method stub
				imageLogo.visible = false;
			}
			
			public function printInfo(event : MouseEvent = null):void
			{
				var printReceipt:PrintUtil = new PrintUtil();
				printReceipt.printComponentToScaledWidth(printThisComponent);
			}
			
			/**
			 *  Set functioin of ' toBePrintData '
			 */
			public function set toBePrintData(component:IUIComponent):void
			{
				if(component != null)
				{
					this._toBePrintData = component;
					if(!printScrollContent)
					{
						takeSnapshot(toBePrintData);
					}
					else
					{
						flattenVScrollbarAndTakeSnap(toBePrintData);
					}
				}
				else
					Alert.show("Print data is not available.");
			}
			
			private function flattenVScrollbarAndTakeSnap(component:IUIComponent):void
			{
				saveAndChangePrintObjectSize(component);
				component.addEventListener(FlexEvent.UPDATE_COMPLETE, takeSnapshopAfterUpdated);
			}
			
			private function takeSnapshopAfterUpdated(event:FlexEvent):void
			{
				var component:IUIComponent = event.target as IUIComponent;
				try
				{
					takeSnapshot(component);
				}
				catch(e:*)
				{
					Alert.show("Print data error!");
					onClickClose();
				}
				finally
				{
					component.removeEventListener(FlexEvent.UPDATE_COMPLETE, takeSnapshopAfterUpdated);
					restorePrintObjectSize(component);
				}
			}
			
			private function saveAndChangePrintObjectSize(component:IUIComponent):void
			{
				sortedSizeWidth = component.width;
				sortedSizeHeight = component.height;
				
				var contentWidth:Number;
				var contentHeight:Number;
				if(component is List)
				{
					contentWidth =  component.measuredWidth;
					contentHeight = (component as List).scroller.viewport.contentHeight;
				}else{
					contentWidth = component.measuredWidth;
					contentHeight = component.measuredHeight;
				}
				
				component.setActualSize(contentWidth, contentHeight);
			}
			
			private function restorePrintObjectSize(component:IUIComponent):void
			{
				component.setActualSize(sortedSizeWidth, sortedSizeHeight)
			}
			
			//take snapshot for a component.
			private function takeSnapshot(component:IUIComponent):void
			{
				var bmpData:BitmapData;
				var bmp:Bitmap;
				var uIcom:Canvas;
				
				bmpData = new BitmapData(component.width, component.height);					
				bmpData.draw(component);
				
				bmp = new Bitmap(bmpData);
				uIcom = new Canvas();
				
				uIcom.rawChildren.addChild(bmp);
				
				/*
				*	TODO : rather simply assigning dimensions - check for compatibility with Paper Size, too 
				*/
				uIcom.width = bmp.width;
				uIcom.height = bmp.height;
				
				printThisComponent.addElement(uIcom as IVisualElement);	
			}
			
			/**
			 *  Get functioin of ' toBePrintData '
			 */
			public function get toBePrintData():IUIComponent
			{
				return _toBePrintData;
			}
			
			public function toBePrintMulipleData(arrComponents:Array):void
			{
				var bmpData:BitmapData;
				var bmp:Bitmap;
				var uIcom:Canvas;
				
				if(arrComponents != null || arrComponents.length >= 1)	
				{		// to add multiple component
					var i : int;
					for ( i = 0; i < arrComponents.length; i++)
					{
						this._printMulipleData = arrComponents[i] as IUIComponent;
						bmpData = new BitmapData(_printMulipleData.width, _printMulipleData.height);					
						bmpData.draw(_printMulipleData);
						
						bmp = new Bitmap(bmpData);
						uIcom = new Canvas();
						
						uIcom.rawChildren.addChild(bmp);
						
						/*
						*	TODO : rather simply assigning dimensions - check for compatibility with Paper Size, too 
						*/
						uIcom.width = bmp.width;
						uIcom.height = bmp.height;
						
						printThisComponent.addElement(uIcom as IVisualElement);
					}
				}
				else
					Alert.show("Print data is not available.");
			}
			
			protected function titlewindow1_closeHandler(event:CloseEvent):void
			{
				// TODO Auto-generated method stub
				printThisComponent.removeAllElements();
				this.removeEventListener(CloseEvent.CLOSE, titlewindow1_closeHandler);
				PopUpManager.removePopUp(this);
			}
			
			protected function onPrintHolderUpdateComplete(event:FlexEvent):void
			{
				
			}

		]]>
	</fx:Script>
	
	<s:HGroup width="100%" top="10" horizontalAlign="right" paddingRight="20">
		<s:Button label="Print" buttonMode="true" 
				  
				  toolTip="Print"/>
	</s:HGroup>
	<s:Scroller width="100%" height="100%" top="35" verticalScrollPolicy="on" horizontalScrollPolicy="off">
		<s:VGroup width="100%" horizontalAlign="center" 
				  paddingLeft="10" 
				  paddingRight="10"
				  paddingTop="10"
				  paddingBottom="10">
			<s:VGroup id="printThisComponent" width="100%" height="100%" paddingBottom="20"
					  top="90" updateComplete="onPrintHolderUpdateComplete(event)"
					  verticalAlign="top">
				<s:HGroup horizontalAlign="left" paddingLeft="30" verticalAlign="middle">
					<mx:Image id="imageLogo" source="{resourceManager.getString(ConfigEnum.NEO_APP_CONFIGURATION_BUNDLE, 'accountmanagement.createaccount.nswjurisdiction.logo')}"
							  height="34"
							  visible="{jurisdictionID==ConfigEnum.JURISDICTION_NSW}" includeInLayout="{jurisdictionID==ConfigEnum.JURISDICTION_NSW}"/>
					<mx:Image id="imageLogovic" source="{resourceManager.getString(ConfigEnum.NEO_APP_CONFIGURATION_BUNDLE, 'accountmanagement.createaccount.vicjurisdiction.logo')}"
							  height="34"
							  visible="{jurisdictionID==ConfigEnum.JURISDICTION_VIC}" includeInLayout="{jurisdictionID==ConfigEnum.JURISDICTION_VIC}"/>
					<mx:Spacer width="100%" />
				</s:HGroup>
				
				<s:VGroup width="100%" includeInLayout="{printScrollContent}" gap="0">
					<s:SkinnableContainer width="100%"
										  height="35"
										  
						<s:Label text="{printTitle}" 
								 styleName="largeSectionHeading"
								 left="10"
								 verticalCenter="0"/> 
					</s:SkinnableContainer>
					<s:Label text="{dateDisplayString}" height="50" verticalAlign="middle" width="100%" fontSize="14" fontWeight="bold" color="#000000"/>
				</s:VGroup>
				
			</s:VGroup>	
		</s:VGroup>
	</s:Scroller>
</s:TitleWindow>	

 打印按钮触发的事件函数

 

public function print(obj:UIComponent, printForScorllContent:Boolean=false):void
		{
			if (printPreviewPopUp)
			{
				PopUpManager.removePopUp(printPreviewPopUp);
			}
			printPreviewPopUp = new PrintPreviewPopUp();
			printPreviewPopUp.printScrollContent = printForScorllContent;
			if(printForScorllContent)
			{
				printPreviewPopUp.printTitle = headerLabel;
				printPreviewPopUp.dateDisplayString = dateDisplayString;
			}
			printPreviewPopUp.jurisdictionID =  applicationModel.getJurisdictionId();
			PopUpManager.addPopUp(printPreviewPopUp as IFlexDisplayObject, FlexGlobals.topLevelApplication as DisplayObject, true);
			
			if(obj.height>0 && obj.width>0)
			{
				isPrinting = true;
				printPreviewPopUp.toBePrintData = obj;
				printPreviewPopUp.x = FlexGlobals.topLevelApplication.width/2 - obj.width/2;
				printPreviewPopUp.y = 50; 
				PopUpManager.bringToFront(printPreviewPopUp as IFlexDisplayObject );
				printPreviewPopUp.addEventListener(CloseEvent.CLOSE, onPrintPreviewPopupClosed);
			}
		}

 

 
1
6
分享到:
评论
2 楼 xuhuanchao 2012-06-06  
楼主能发我个打印预览项目吗?
谢谢 253113904@qq.com
1 楼 haiyangyiba 2011-09-26  
楼主继续加油
目前菜鸟,进来就想看个图。。

相关推荐

    Flex实现打印预览

    Flex是Adobe公司开发的一种基于ActionScript 3.0的...综上所述,实现Flex的打印预览功能涉及到对Flex打印API的理解、预览组件的创建以及用户交互的实现。通过这些步骤,你可以为用户提供一个方便且直观的打印预览体验。

    Flex 打印及打印预览功能

    在Flex中,打印和打印预览功能是应用程序与用户进行数据输出交互的重要部分。本篇文章将深入探讨Flex中的打印及打印预览功能,以及如何利用这些功能来提升应用程序的实用性。 首先,我们要了解Flex中的`mx.printing...

    flex 打印预览

    Flex打印预览通常涉及到将Flex组件或舞台内容转化为位图图像,然后在预览窗口中显示这些图像。这包括对组件进行渲染,捕获其像素数据,并将其转换为适合打印的格式。 3. 创建打印预览界面: 开发者可以使用Flex布局...

    flex 带打印预览功能的PrintJob

    flex 带打印预览功能的PrintJob 经过我几天的努力,终于实现了flex的打印预览。把它做成了一个库文件,SuperPrintJob.swc。大家可以自由下载使用。这个压缩包中包含库文件的代码和使用的工程。详细的使用方法参见我...

    打印预览(flex)

    Flex打印预览是一种在Flex应用程序中实现打印功能的技术,它允许用户在实际打印之前查看文档的打印效果。Flex是Adobe公司开发的一种基于ActionScript 3.0的富互联网应用程序(RIA)框架,它使用MXML和AS3进行编程,...

    Flex实践——Datagrid的打印预览与打印

    这个主题聚焦于Flex中的一个关键组件——Datagrid,以及如何实现它的打印预览和打印功能。Datagrid是Flex中用于展示数据集的常用控件,常用于表格形式的数据展示和操作。 首先,我们要理解Flex Datagrid的基础知识...

    Flex打印预览

    为了解决这个问题,我们有了"Flex打印预览"这一解决方案。 Flex是Adobe公司推出的一种基于Flash技术的开发框架,用于构建富互联网应用程序(RIA)。ArcGIS Flex Viewer是Esri为开发者提供的一个开源框架,用于在Web...

    flex 打印源代码

    8. **打印预览**: 在Flex中实现打印前的预览功能,通常需要使用`flash.display.DisplayObject`的`drawToBitmap`方法将舞台内容捕获为位图,然后在屏幕上显示预览。 9. **页面设置与布局**: 了解如何通过`...

    Flex 打印例子官方的哦

    Flex打印技术是Adobe Flex框架中的一个重要组成部分,它允许开发者创建应用程序来打印内容或者与打印机进行交互。Flex是一款基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(RIA)。在Flex中,打印...

    flex4.5 打印功能

    Flex 4.5 打印功能是 Adobe Flex 开发框架中的一个重要组成部分,它允许开发者创建具有打印和打印预览功能的富互联网应用程序(RIA)。在 Flex 4.5 中,打印功能得到了显著增强,提供了更加灵活和精细的控制,使得...

    web打印,打印预览

    Web打印和打印预览是网页开发中的重要组成部分,它们允许用户在正式打印前查看文档的打印效果,确保格式正确无误。在这个过程中,开发者通常会利用浏览器提供的API和CSS技术来实现这一功能。下面我们将详细探讨这个...

    flex 打印控件,应该说是相当完美了。

    flex 打印控件 应该说是相当完美了。 但只能够用于grid打印和打印预览

    Flex在线预览文档组件FlexPaper_swc

    FlexPaper是一款功能强大的在线文档预览组件,专为Flex开发者设计,用于在Web应用程序中实现PDF和Word文档的无缝预览。本组件分为两个版本,即SDK3.5和SDK4.0,以适应不同Flex开发环境的需求。 1. Flex平台介绍 ...

    flex 分页打印 FlexReport

    7. **打印和预览**:提供预览功能,让用户在实际打印前查看报表效果。FlexReport通常会提供控件以支持打印操作。 8. **事件处理**:处理用户交互,例如点击页码切换页面、选择打印选项等。 9. **优化性能**:对于...

    flex的一个打印测试

    在实际操作中,可能还会遇到一些常见问题,如打印预览不准确、打印速度慢或者打印效果与预期不符。这些问题可能涉及到位图的分辨率、打印设备的兼容性以及Flex代码的优化等。开发者需要对这些因素进行调试和调整,以...

    Flex打印(转)

    标题“Flex打印(转)”可能指的是一个关于使用Adobe Flex技术进行打印功能开发的文章或教程。Flex是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。在这个场景中,"转"可能意味着内容是作者...

    实现客户端打印之jasperrport3.7.0(打印预览+多页同时打印)

    标题中的“实现客户端打印之jasperrport3.7.0”指的是使用JasperReports的Portlet版本3.7.0来实现在客户端的打印功能,包括打印预览和多页同时打印。JasperReports是一个开源的Java报表库,它能够帮助开发者创建、...

    Flex:Web报表引擎MyReport 1.0.0.2

    Web上的良好的打印解决方案,WinForm的打印预览体现,报表自动化,支持直接打印,页小计,统计,转成金额大写等功能,满足中国式报表的常见功能需求。 最新版1.2.0.1下载地址:...

Global site tag (gtag.js) - Google Analytics