`
远去的渡口
  • 浏览: 473558 次
  • 性别: Icon_minigender_2
  • 来自: 上海转北京
社区版块
存档分类
最新评论

Flex中使用FlexPrintJob打印,调整间距问题

    博客分类:
  • flex
 
阅读更多

最近修改一个打印小票的问题,需求是这样的:

一个客人订餐,可以预订多个桌台,小票内容分为:

1)商户,门店信息,预订订单号,操作员(head头部信息) ticketHead.mxml

2)顾客姓名,性别,预订时间段,人数 作为中间体(desk) 这一部分可能有多个,程序是采用循环方式读取,如有多个桌台,则此项有多个.  ticketItem.mxml

3) 喜好,预订备注,服务信息等。以及最后的公司版权标(尾部end) ticketEnd.mxml

 

之前做这个打印的同事,采用的方式是使用一个FlexPrintJob,将这三个页面分别加入到FlexPrintJob中,都设置页面宽度与高度,这样问题就出现了,打印出来的小票明显分成为三组,各组之间的间距过大,造成浪费纸张。

之前的程序代码如下:

 /**
		  * 一次性加载太多数据,打印机只能打印部分,因此需分批次加载数据
		  * @param target
		  * 
		  */
		 public  static function doPrint(target:Container):void {
		 	 var printJob:FlexPrintJob = new FlexPrintJob();
		 	 printJob.printAsBitmap= false;//此设置可以使打印效果比较清晰

            if (printJob.start()) {
                //小票头部信息
                var head:ticketHead = new ticketHead();
                head.objData = ticket1(target).objData;
                head.width=printJob.pageWidth;
	            head.height=printJob.pageHeight;
                Application.application.addChild(head);
                printJob.addObject(head);
                Application.application.removeChild(head);
                //桌台信息
                for(var i:int=0;i<ticket1(target).objData.deskName.length;i++){
                	var desk:ticket1Item = new ticket1Item();
                	desk.width=printJob.pageWidth;
	                desk.height=printJob.pageHeight;
                	desk.objData = ticket1(target).objData;
                	desk.tableName = ticket1(target).objData.deskName[i];
                	Application.application.addChild(desk);
	                printJob.addObject(desk);
	                Application.application.removeChild(desk);
                }
                //小票尾部信息
                var end:ticketEnd = new ticketEnd();
                end.width=printJob.pageWidth;
	            end.height=printJob.pageHeight;
                end.objData = ticket1(target).objData;
                Application.application.addChild(end);
                printJob.addObject(end);
                Application.application.removeChild(end);
            }
            printJob.send();
        }

 

为了解决这个问题,我本以为将各mxml中头标上的height="100%"去掉就可以了,但是问题仍然存在。后来就在这打印的程序上思考,是不是因为每次单独用printJob.addObject(desk) 等加载,所以造成这个问题,后来就多次尝试,使用一个VBox组件container将三个页面都包含在一起,然后只使用一次printJob.addObject(container);将这一个组件加入,问题就解决了。贴出修正后的代码片段:

 public  static function doPrint(target:Container):void {
		 	 var printJob:FlexPrintJob = new FlexPrintJob();
		 	 printJob.printAsBitmap= false;//此设置可以使打印效果比较清晰
            if (printJob.start()) {
            	var container:VBox = new VBox();
	        	container.setStyle("verticalScrollPolicy", "off");
	        	container.setStyle("horizontalScrollPolicy", "off");
	        	container.setStyle('verticalGap','0');
	            	
	            //小票头部信息
                var head:ticketHead = new ticketHead();
                head.objData = ticket1(target).objData;
                container.addChild(head);
              
                  //桌台信息
                for(var i:int=0;i<ticket1(target).objData.deskName.length;i++){
                	var desk:ticket1Item = new ticket1Item();
                	desk.objData = ticket1(target).objData;
                	desk.tableName = ticket1(target).objData.deskName[i];
                	container.addChild(desk);
                }
            	
            	   //小票尾部信息
                var end:ticketEnd = new ticketEnd();
                end.objData = ticket1(target).objData;
                container.addChild(end);
            	container.width = printJob.pageWidth;
            	container.height = printJob.pageHeight;
            	Application.application.addChild(container);
                printJob.addObject(container);
                Application.application.removeChild(container);
}
            printJob.send();
        }

 

最后,备注一点:

Flex提供两种打印方法:FlexPrintJobPrintJob

一、由于flex是打印图像的缘故,打印出来的文字、表格会不清晰。解决方法如下:

1、将FlexPrintJobprintAsBitmap属性设置为true
2
、使用PrintJob

 

 

分享到:
评论

相关推荐

    flex打印操作(FlexPrintJob)还有分页打印操作具体实现

    Flex中的打印操作和分页打印操作是实现数据输出的重要功能,本文将详细介绍FlexPrintJob类的使用以及分页打印的实现。 首先,FlexPrintJob类是用于在Adobe Flash Player中执行打印任务的类。它允许您打印Flex应用中...

    FlexReport打印

    报表布局:如果要在Flex中打印页面,你应该创建一个容器,并把它加入到FlexPrintJob中。它处理静态内容时没有什么大问题。但是如果创建动态报表,即你不知道在处理过程中会产生多少页的话,事情很快会变成噩梦。 多...

    flex通过AlivePDF生成PDF文档

    本文将详细介绍如何使用Flex框架结合AlivePDF库来生成PDF文档。主要内容包括:AlivePDF的基本介绍、Flex环境搭建、AlivePDF类库详解以及实际代码示例分析。 #### AlivePDF简介 AlivePDF是一款功能强大的PDF生成库...

    Flex UI组件使用全集

    ### Flex UI组件使用全集详解 #### 概述 本文档是基于阿树对Adobe Flex UI组件库的全面整理,并结合Adobe主页上提供的各种组件代码示例进行深度解析。Flex是一种用于构建高度交互式的Web应用的框架,尤其适用于创建...

    《Flex 3 组件实例与应用(2009版)》(PDF)

    以上仅为《Flex 3 组件实例与应用(2009版)》书中部分知识点的概述,该书详细介绍了每一个组件的使用方法、属性、事件以及示例代码,对于希望深入学习和掌握Flex 3开发技术的读者来说,是一本不可多得的实战指南。

    Flex 3 组件实例与应用(2009版)

    - **FlexPrintJob/PrintDataGrid** - 打印相关的组件。 - **PrintDataGridExample** - 打印数据网格的例子。 - **FormPrintView/FormPrintHeader/FormPrintFooter** - 表单打印视图及相关组件。 #### 五、验证器与...

Global site tag (gtag.js) - Google Analytics