最近修改一个打印小票的问题,需求是这样的:
一个客人订餐,可以预订多个桌台,小票内容分为:
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提供两种打印方法:FlexPrintJob和PrintJob。
一、由于flex是打印图像的缘故,打印出来的文字、表格会不清晰。解决方法如下:
1、将FlexPrintJob中printAsBitmap属性设置为true。
2、使用PrintJob
分享到:
相关推荐
Flex中的打印操作和分页打印操作是实现数据输出的重要功能,本文将详细介绍FlexPrintJob类的使用以及分页打印的实现。 首先,FlexPrintJob类是用于在Adobe Flash Player中执行打印任务的类。它允许您打印Flex应用中...
报表布局:如果要在Flex中打印页面,你应该创建一个容器,并把它加入到FlexPrintJob中。它处理静态内容时没有什么大问题。但是如果创建动态报表,即你不知道在处理过程中会产生多少页的话,事情很快会变成噩梦。 多...
本文将详细介绍如何使用Flex框架结合AlivePDF库来生成PDF文档。主要内容包括:AlivePDF的基本介绍、Flex环境搭建、AlivePDF类库详解以及实际代码示例分析。 #### AlivePDF简介 AlivePDF是一款功能强大的PDF生成库...
### Flex UI组件使用全集详解 #### 概述 本文档是基于阿树对Adobe Flex UI组件库的全面整理,并结合Adobe主页上提供的各种组件代码示例进行深度解析。Flex是一种用于构建高度交互式的Web应用的框架,尤其适用于创建...
以上仅为《Flex 3 组件实例与应用(2009版)》书中部分知识点的概述,该书详细介绍了每一个组件的使用方法、属性、事件以及示例代码,对于希望深入学习和掌握Flex 3开发技术的读者来说,是一本不可多得的实战指南。
- **FlexPrintJob/PrintDataGrid** - 打印相关的组件。 - **PrintDataGridExample** - 打印数据网格的例子。 - **FormPrintView/FormPrintHeader/FormPrintFooter** - 表单打印视图及相关组件。 #### 五、验证器与...