读书人

关于flexprintjob打印遇到的有关问题

发布时间: 2013-01-23 10:44:49 作者: rapoo

关于flexprintjob打印遇到的问题!
需求描述:
目前需要打印类似如下的表格
关于flexprintjob打印遇到的有关问题

实现思路:
因为涉及到复杂的表头,所以表格使用advanceddatagrid来做
一旦数据多了,就会出现滚动条,如果使用直接打印这个 advanceddatagrid,则只能打印当前页面显示的内容,滚动条下面的答不出来,所以考虑使用PrintAdvancedDataGrid,这样滚动条的问题就解决了!

现在的问题:
表格除了advanceddatagrid之外还有表格名称,机构号和日期,这三样东西是放在自己的容器当中,目前使用的PrintAdvancedDataGrid只能打印advanceddatagrid,如果我在最外面加一个容器,例如Vbox ,然后把Vbox给打印机打印,则会出现以下情况,
第一页关于flexprintjob打印遇到的有关问题

第二页关于flexprintjob打印遇到的有关问题

两页格式完全不同了,而且第一页数据数量控制不好。相当于第一页是他是通过vbox的像素,打印出了一张图片一样。

问题就是这样,请各位前辈帮帮忙

[解决办法]
第一页和其他页样式不一样 我觉得可以修改表格的默认样式,

public var borderColor:uint = 0x00999999;

this.setStyle("headerColors",[0x00C0C0C0,0xFFFFFF]);
this.setStyle("useRollOver", false);
this.setStyle("borderColor",borderColor);
this.setStyle("horizontalGridLines", true);
this.setStyle("verticalGridLines", true);
this.setStyle("horizontalGridLineColor",borderColor); // 单元格横向网格线颜色
this.setStyle("verticalGridLineColor",borderColor);// 单元格纵向网格线颜色
this.setStyle("headerSortSeparatorSkin",ProgrammaticSkin); // 去掉排序按钮

等等这些属性修饰下。应该就可以了。


[解决办法]
显示的时候用DataGrid 打印的时候用PrintDataGrid 应该可以解决你的问题把

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
initialize="init()">

<mx:Script>
<![CDATA[
import mx.printing.PrintDataGrid;
import mx.printing.FlexPrintJob;
import mx.collections.ArrayCollection;

[Bindable]
public var dataSource:ArrayCollection = new ArrayCollection();

private var totalRecords:Number = 100;

private function init():void {
for (var i:int = 1; i<=totalRecords; i++) {
var dataObject:Object = new Object();
dataObject.Name = "Name #" + i;
dataObject.Phone = "Phone #" + i;
dataObject.Address = "Address #" + i;
dataSource.addItem(dataObject);
}
}

private function doPrint():void {
var printJob:FlexPrintJob = new FlexPrintJob();
if (printJob.start()) {
var myPrintData:PrintDataGrid = new PrintDataGrid();
Application.application.addChild(myPrintData);
myPrintData.dataProvider = myData.dataProvider;


myPrintData.width = printJob.pageWidth;
myPrintData.height = printJob.pageHeight;

printJob.addObject(myPrintData);
while (myPrintData.validNextPage) {
myPrintData.nextPage();
printJob.addObject(myPrintData);
}
Application.application.removeChild(myPrintData);

printJob.send();
}
}

]]>
</mx:Script>

<mx:Panel title="Flex Tutorial - PrintDataGrid"
width="500" height="500"
horizontalCenter="0" verticalCenter="0"
horizontalAlign="center" verticalAlign="middle">

<mx:DataGrid id="myData"
dataProvider="{dataSource}"
width="400" height="400" />

<mx:Button label="Print" click="doPrint()"/>

</mx:Panel>

</mx:Application>

读书人网 >flex

热点推荐