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

实现思路:
因为涉及到复杂的表头,所以表格使用advanceddatagrid来做
一旦数据多了,就会出现滚动条,如果使用直接打印这个 advanceddatagrid,则只能打印当前页面显示的内容,滚动条下面的答不出来,所以考虑使用PrintAdvancedDataGrid,这样滚动条的问题就解决了!
现在的问题:
表格除了advanceddatagrid之外还有表格名称,机构号和日期,这三样东西是放在自己的容器当中,目前使用的PrintAdvancedDataGrid只能打印advanceddatagrid,如果我在最外面加一个容器,例如Vbox ,然后把Vbox给打印机打印,则会出现以下情况,
第一页
第二页
两页格式完全不同了,而且第一页数据数量控制不好。相当于第一页是他是通过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;
需求描述:
目前需要打印类似如下的表格
实现思路:
因为涉及到复杂的表头,所以表格使用advanceddatagrid来做
一旦数据多了,就会出现滚动条,如果使用直接打印这个 advanceddatagrid,则只能打印当前页面显示的内容,滚动条下面的答不出来,所以考虑使用PrintAdvancedDataGrid,这样滚动条的问题就解决了!
现在的问题:
表格除了advanceddatagrid之外还有表格名称,机构号和日期,这三样东西是放在自己的容器当中,目前使用的PrintAdvancedDataGrid只能打印advanceddatagrid,如果我在最外面加一个容器,例如Vbox ,然后把Vbox给打印机打印,则会出现以下情况,
第一页
第二页
两页格式完全不同了,而且第一页数据数量控制不好。相当于第一页是他是通过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;