在学习Flex的过程中,你可能会遇到Flex4打印功能的问题,这里和大家分享一下,Flex4打印功能和Silverlight4打印功能步骤很相似,但是实现不同,Flex4的打印功能不是事件驱动,基本步骤如下文介绍。
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不支持自动设置打印对象在打印页面中的宽和高;
总结
综上所述,我们可以看出Flex4打印功能要比Silverlight的打印功能更加健全,Flex打印功能中的打印高质量的矢量图和自动分页是两个主要亮点,而当前Silverlight4中自动分页是将要打印视图对象切割成两部分实现打印。而Silverlight4中打印功能的全编程模式也是Silverlight的亮点。从微软对Silverlight的定位方向来看,相信在不久的将来,Silverlight的打印功能会更加的强大和完善。
今天的专业实践检查时,被要求添加一个报表的打印功能,GOD!我哪知道 Flex里怎么实现打印啊,原来想的方案是用游览器自带的打印功能,以为万事OK了,没想到。。。。
因为我们的项目里用的是组件开发,因为Flex中不存在一个工程下有多个页面的说法,因为主页面背景改不了,也就意味着用游览器打印只能打印当前显示的全部内容,而不仅仅是一个表格内的内容。。。。
中午回来,花了二三个小时上网找了一下资料,结果,找到了单独实现打印和打印预览的代码,皇天不负有心人啊。。。。
PS:以下的核心代码来自于网上,我只是将它们两个功能整合在了一起,应该会对要实现打印功能的朋友有帮助(因为打印应该都要先预览一下)。
Application:
DataGridPrint.mxml
<?xml version="1.0"?>
<!-- printing\DGPrintCustomComp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
height="450"
width="550">
<mx:states>
<mx:State name="printView">
<mx:RemoveChild target="{myForm}"/>
<mx:AddChild position="lastChild">
<mx:Panel width="388" height="303" layout="absolute">
<mx:Image id="img" x="10" y="10"/>
</mx:Panel>
</mx:AddChild>
<mx:AddChild position="lastChild">
<mx:Button label="Back" click="currentState="""/>
</mx:AddChild>
</mx:State>
</mx:states>
<mx:Script>
<![CDATA[
import mx.printing.FlexPrintJob;
import myComponent.MyPrintView;
import mx.graphics.ImageSnapshot;
import mx.core.UIComponent;
private function print(u:UIComponent):void{
currentState="printView";
var bmp:BitmapData = ImageSnapshot.captureBitmapData(u);
var i:Bitmap = new Bitmap(bmp);
img.source = i;
img.scaleContent = true;
}
public function doPrint():void {
// Create a FlexPrintJob instance.
var printJob:FlexPrintJob = new FlexPrintJob();
// Start the print job.
if(printJob.start()) {
// Create a MyPrintView control as a child
// of the current view.
var formPrintView:MyPrintView = new MyPrintView();
addChild(formPrintView);
// Set the print control's data grid data provider to be
// the displayed data grid's data provider.
formPrintView.myDataGrid.dataProvider =
myDataGrid.dataProvider;
// Add the SimplePrintview control to the print job.
// For comparison, try setting the
// second parameter to "none".
printJob.addObject(formPrintView);
// Send the job to the printer.
printJob.send();
// Remove the print-specific control to free memory.
removeChild(formPrintView);
}
}
]]>
</mx:Script>
<!-- The form to display-->
<mx:Form id="myForm">
<mx:FormHeading label="Contact Information"/>
<mx:FormItem label="Name: ">
<mx:TextInput id="custName"
width="200"
text="Samuel Smith"
fontWeight="bold"/>
</mx:FormItem>
<mx:FormItem label="Phone: ">
<mx:TextInput id="custPhone"
width="200"
text="617-555-1212"
fontWeight="bold"/>
</mx:FormItem>
<mx:FormItem label="Email: ">
<mx:TextInput id="custEmail"
width="200"
text="sam@sam.com"
fontWeight="bold"/>
</mx:FormItem>
<mx:FormHeading label="Product Information"/>
<mx:DataGrid id="myDataGrid" width="300">
<mx:dataProvider>
<mx:Object Product="Flash" Code="1000"/>
<mx:Object Product="Flex" Code="2000"/>
<mx:Object Product="ColdFusion" Code="3000"/>
<mx:Object Product="JRun" Code="4000"/>
</mx:dataProvider>
</mx:DataGrid>
<mx:Button label="PrintView" click="print(myDataGrid)"/>
<mx:FormItem label="Label">
</mx:FormItem>
<mx:Button id="myButton"
label="Print"
click="doPrint();"/>
</mx:Form>
</mx:Application>
Component:
MyPrintView. mxml(这是一个组件)
<?xml version="1.0"?>
<!-- printing\myComponents\MyPrintView.mxml -->
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
backgroundColor="#FFFFFF"
height="250" width="450"
paddingTop="50" paddingLeft="50" paddingRight="50">
<!-- The controls to print, a PrintDataGrid control. -->
<mx:PrintDataGrid id="myDataGrid" width="100%">
<mx:columns>
<mx:DataGridColumn dataField="Product"/>
<mx:DataGridColumn dataField="Code"/>
</mx:columns>
</mx:PrintDataGrid>
</mx:VBox>
分享到:
相关推荐
在Flex中实现打印功能,通常需要以下几个步骤: 1. 创建`PrinterJob`实例,通过`new PrinterJob()`。 2. 使用`PrinterJob.startJob()`开始打印任务,并可在此调用`setJobName()`设置打印任务的名称,`setCopies()`...
Flex是Adobe公司开发的一种基于ActionScript 3.0的...综上所述,实现Flex的打印预览功能涉及到对Flex打印API的理解、预览组件的创建以及用户交互的实现。通过这些步骤,你可以为用户提供一个方便且直观的打印预览体验。
压缩包文件“FlexPrintFour”很可能包含了实现Flex 4.5打印功能的相关示例代码、文档或资源,这些可以帮助开发者快速理解和应用上述功能。通常,这样的资源会包含一个或多个ActionScript类文件,可能还有MXML界面...
在提供的文件列表"Pring"中,虽然没有具体的代码示例,但我们可以假设它包含了一些Flex打印功能的示例代码或教程资料。通过研究这些文件,开发者可以更好地理解如何在实际项目中运用Flex的打印功能。 总的来说,...
在Flex中实现打印功能,开发者通常需要理解以下几个核心知识点: 1. **ActionScript与MXML**: ActionScript是Flex的主要编程语言,类似于JavaScript,用于编写动态功能;MXML是一种声明式语言,用于定义UI组件和...
标题中的"FLEX alive pdf 打印pdf"指的是使用Adobe Flex技术来实现PDF文档的打印功能。Flex是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。AlivePDF是Flex的一个库,它允许开发人员在...
1. Flex打印服务: Flex提供了PrintJob类,该类是打印服务的基础,允许开发者创建、配置和执行打印任务。通过实例化PrintJob对象,可以设置打印参数,如页边距、纸张大小、方向等。 2. 打印预览原理: Flex打印预览...
flex 带打印预览功能的PrintJob 经过我几天的努力,终于实现了flex的打印预览。把它做成了一个库文件,SuperPrintJob.swc。大家可以自由下载使用。这个压缩包中包含库文件的代码和使用的工程。详细的使用方法参见我...
9. **兼容性和测试**:Flex打印功能可能在不同的操作系统、浏览器和Flash Player版本上表现不一,因此在开发时需要进行广泛的测试,确保在各种环境中都能正常工作。 10. **错误处理**:打印过程中可能会出现各种...
在ArcGIS for Flex中,打印功能主要通过`esri.map.PrintTask`类实现,它提供了将地图视图转换为可打印格式的能力。`PrintTask`对象可以执行打印作业,这些作业由`esri.tasks.PrintParameters`类定义,其中包含了地图...
首先,Flex打印功能的实现依赖于`flash.printing.PrintJob`类。这个类提供了创建、设置和执行打印任务的方法。例如,`start()`方法启动打印作业,`addPage()`用于添加要打印的位图或显示对象,而`send()`则将所有...
- **集成开发环境**:提供代码编辑、调试、构建和部署等功能,支持Flex和ActionScript项目。 - **Design View**:可视化的界面设计工具,允许开发者通过拖放组件来构建用户界面。 - **Source View**:代码编辑...
在描述中提到了一个博客链接,虽然具体内容没有提供,但可以推测博主“goby2008”在iteye这个平台上分享了一篇关于Flex打印功能实现的文章。iteye是一个中国知名的IT技术社区,博主通常会在这里发布自己的技术心得、...
而"flex4.5打印导出pdf完美版"这个项目则是针对Flex 4.5平台的一个特定功能实现,即在应用程序中添加PDF打印和导出功能。 PDF(Portable Document Format)是一种广泛使用的文档格式,能够保留原始文档的格式和内容...
Flex打印机制是一个在Adobe Flex应用程序中实现打印功能的关键技术,它允许开发者创建用户友好的界面,以便用户可以方便地打印内容。Flex作为一个基于ActionScript 3.0的开放源代码框架,主要用于构建富互联网应用...
Flex打印预览是一种在Flex应用程序中实现打印功能的技术,它允许用户在实际打印之前查看文档的打印效果。Flex是Adobe公司开发的一种基于ActionScript 3.0的富互联网应用程序(RIA)框架,它使用MXML和AS3进行编程,...
FlexReport是一款基于Adobe Flex技术的报表工具,用于在Flex应用程序中实现复杂的分页打印功能。Flex是Adobe开发的一种开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,RIA)。通过使用Flex,...
本文将围绕“Flex实践——Datagrid的打印预览与打印”这一主题,深入探讨如何在Flex应用中实现数据网格控件Datagrid的打印功能,包括预览和实际打印操作。 首先,Datagrid是Flex中一个非常重要的组件,它用于展示二...
5. **打印功能**:利用Flex的printJob类,可以实现在客户端直接打印PDF,用户无需先下载文件。需要注意的是,打印前需要设置好打印机和打印参数。 6. **优化性能**:对于大数据量的报表,可能需要考虑分页、异步...