`
jiangwt100
  • 浏览: 36344 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Flex4打印功能的实现

 
阅读更多

在学习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”。

  1. protectedfunctionbutton1_clickHandler(event:MouseEvent):void  
  2.  
  3. {  
  4.  
  5. varjob:FlexPrintJob=newFlexPrintJob();  
  6.  
  7. job.printAsBitmap=false;  
  8.  
  9. if(job.start()){  
  10.  
  11. vargroup:HGroup=newHGroup();  
  12.  
  13. group.height=job.pageHeight;  
  14.  
  15. group.width=job.pageWidth;  
  16.  
  17. vartext:SimpleText=newSimpleText();  
  18.  
  19. text.text="Hello";  
  20.  
  21. text.setStyle("fontFamily","Arial");  
  22.  
  23. text.setStyle("fontSize",12);  
  24.  
  25. group.addElement(text);  
  26.  
  27. text=newSimpleText();  
  28.  
  29. text.setStyle("fontFamily","Arial");  
  30.  
  31. text.setStyle("fontSize",12);  
  32.  
  33. text.text="World";  
  34.  
  35. group.addElement(text);  
  36.  
  37. addElement(group);  
  38.  
  39. job.addObject(group,FlexPrintJobScaleType.NONE);  
  40.  
  41. job.send();  
  42.  
  43. removeElement(group);  
  44.  
  45. }  
  46.  

对比上面的两组打印代码可以看出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>

 

分享到:
评论
3 楼 陌上君 2016-11-25  
文章很好 ,记下了,多谢。上面那个不小心的留言删了吧
2 楼 陌上君 2016-11-25  
引用
引用
[u][i][b]
[flash[color=violet]=200,200][url][url][list]
[*][list][color=brown]
[*][*][list]
[*][*][*][list]
[*][*][*][*][list]
[size=medium][/size]
[*][*][*][*][*]
[*][*][*][*][/list]
[*][*][*][/list]
[*][*][/list]
[*][/list][/color]
[/list][/url][/url][/flash]
[/b][/i][/u]
[/color]
1 楼 Slardar_007 2015-01-15  
sssssssssss

相关推荐

    flex 带打印预览功能的PrintJob

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

    ArcGis For Flex 打印

    有两个ArcGis实现的打印功能,以及使用的包,及查看例子的地址等.是自己做时的总结

    flex+gcc+tools

    可以完成以下实验的工具 实验功能: 1.C++源代码扫描程序识别C++记号。C++语言包含了几种类型的记号:...4.* 选作部分:进一步思考或实现——如何进一步实现减小源文件大小的压缩功能。 5.应该书写完善的软件文档。

    FlexReport打印

    FlexReport基于LGPL协议发布,可以在...打印预览:正如我刚才说的,各个组织需要打印功能,但他们也不希望浪费纸张。使用PrintJob是无法实现打印预览的。没有人希望打印了100页表格之后,才发现打印了错误的数据。

    Flex企业应用开发实战源代码

    第8章 Flex打印 265 8.1 Web打印方案 265 8.1.1 原生打印 265 8.1.2 宿主打印 265 8.1.3 外部打印 266 8.2 为什么使用Flex来打印 267 8.3 使用PrintJob打印 267 8.4 深入了解PrintJob 268 8.5 实战PrintJob...

    学Flex建的第一个项目HelloFlex

    所分享的代码适合Flex初学者。 实现的功能:弹出“HelloFlex!”字样;后台打印相应文字。

    flex3的cookbook书籍完整版dpf(包含目录)

    启动DataGrid拖拽功能 6.9节. 编辑DataGrid数据项 6.10节. 在DataGrid中搜索并自动滚屏到匹配项 6.11节. 使用GroupingCollection生成数据汇总 6.12节. 为GroupingCollection创建异步刷新 第七章:渲染器和编辑器...

    自来水收费系统毕业论文

    插图目录 3 表格目录 4 自来水收费系统 5 1 绪论 7 1.1 引言 7 1.2 项目的背景及现实意义 7 1.3 自来水收费系统 7 1.3.1 自来水收费系统介绍 7 ...4.4 实现联机打印功能 31 5 总结 33 致谢 34 参考文献 35

    传真机模拟操作系统

    前段Flex,后端Java实现模拟仿真机操作功能,模拟打印,功能设置,数据库MySQL,界面友好,可扩展性强

    基于Java web的水费缴纳管理系统.doc

    该系统实现了信息查询、人员信息管理、报表生成和打印等功能。用户只要使用IE浏览器访问相关站点,输入正确的用户名和密码成功登陆后,便可查询用水情况和其他相关信息。对管理员来说使用起来也非常的方便快捷,可以...

    富士_MICREX-SX系列可编程控制器SPM样本.pdf

    另外,可以对使用频率较高的程序或电路进行FB(功能块)化,即可实现简单再利用。 特性 1).语言的混合使用 ·支持标准中规定的全部5种程序表达。可以组合编写适合控制。 ·内容的程序表达方式。 2).卓越的文档功能 ...

    利用计算机打印口调试FPGA

    摘要:介绍一种用于计算机打印口调试ALTERA的FLEX10K系列FPGA的方法。对于没有ALTERA的Quartus软件的设计者,该方法可以在一定程序上弥补MAX+PLUSIII软件没有SinalTap逻辑分析功能的不足。 随着FPGA实现的功能...

    自来水收费系统(源码+论文)

    该系统实现了信息查询、人员信息管理、报表生成和打印等功能。用户只要使用IE浏览器访问相关站点,输入正确的用户名和密码成功登陆后,便可查询用水情况和其他相关信息。对管理员来说使用起来也非常的方便快捷,可以...

    集成运放参数测试仪[2005年电子大赛一等奖.doc

    SPC E061A主要实现用户接口界面(键盘扫描、液晶显示、数据打印以及其他服务进程的调度 )、AD转换以及测量参数(Vio Iio Kcmr Avd BWG Tr)计算、与上位机通信等方面的功能。上位机主要实现向下位机发送测量指令、...

    ActionScript开发技术大全

    2.2.2在FlexBuilder3下创建ActionScript3.0项目 15 2.3服务端部署 16 2.3.1安装JDK 16 2.3.2安装Tomcat服务器 18 2.3.3Tomcat集成RED5服务器 20 2.4安装VisualBasic6.0 22 2.5小结 23 第3章ActionScript3.0语法 24 ...

    基于精简 C 语言的 C-MIPS 编译器(编译原理实验)【100012256】

    词法和语法分析器分别利用现有工具,Flex,Bison 完成,根据输入的文法和语法树构建规则自动生成分析源程序的 C 语言程序,生成抽象语法树并打印之。 语义分析器需要一个 C 语言程序,通过遍历抽象语法树构造符号表...

    asp.net知识库

    存储过程中实现类似split功能(charindex) 通过查询系统表得到纵向的表结构 将数据库表中的数据生成Insert脚本的存储过程!!! 2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储...

    ActionScript开发人员指南中文版

    本地化Flex内容 本地化Flash内容 本地化AIR应用程序 对日期、时间和货币进行本地化 第章:关于HTML环境 HTML环境概述 AIR和WebKit 第章:在AIR中进行HTML和JavaScript编程 关于HTMLLoader类 避免与安全相关的...

    Photon-Profiles-for-PrusaSlicer:经过微调的用于PrusaSlicer的Photon:trade_mark:配置文件。 高度优化,用于带蚊子热端的MK3S BMG挤出机,但在库存的MK3S打印机上应该可以正常工作

    特征针对各种喷嘴尺寸(0.15mm,0.20mm,0.25mm,0.40mm,0.50mm,0.60mm,0.80mm,1mm)进行了调整的型材针对不同材料(PLA,PETG,PC,FLEX等)调整的配置文件通过针对最佳温度和挤出倍增器的广泛测试,为各种长丝...

    Altium Designer Beta 19.0.10完整版安装包+安装教程+和谐文件

    修复了PCB 3D打印输出的打印预览为空白的问题。 25760 使用ActiveBOM文档时,粘贴功能已得到改进,并且至少选择了一个目标单元格。 25801 修复了无法在“存储”面板(BC:8643)中成功重命名设计文件的问题。 26014 ...

Global site tag (gtag.js) - Google Analytics