首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

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

2013-01-23 
关于flexprintjob打印遇到的问题!需求描述:目前需要打印类似如下的表格实现思路:因为涉及到复杂的表头,所

关于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>

热点排行