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

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

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

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

 

 

你可能感兴趣的:(print)