Flex 4打印错误与动态组件

时间:2011-09-19 07:58:31

标签: flex printing flex4 components memory-address

我有一组动态添加到我的Flex 4舞台的组件。

问题1: 将这些对象添加到print时,如何处理这些对象。我无法动态生成对象并附加它们,因为打印管理器不会等待动态数据填充。

我目前使用以下代码动态地解决失败的项目:

public function PrintDashPreview():void{
    var ItemsDrawn:int = 0;
    var printJob:FlexPrintJob = new FlexPrintJob();
    if(printJob.start()){
        for each (var item:Object in GetDashBoardPreviewItems.lastResult.DashboardItem)
        {
            ItemsDrawn ++
            this.addElement(dashPreview["flexShape" + TheID]);
            printJob.addObject(dashPreview["flexShape" + TheID]);
            this.removeElement(dashPreview["flexShape" + TheID]);

        }
        printJob.send()

    Alert.show('Sent: ' + ItemsDrawn + ' items to page for printing.','Print Progress Debug');
    }
}

如何告诉flex抓取这些特定项目并将它们添加到打印作业中。

问题2:

如何告诉flex将每个项目放在另一个下面的每个项目下面。

请感谢您提供的任何帮助。

此致 克雷格麦克

1 个答案:

答案 0 :(得分:1)

打印动态内容的方法通常如下:

(1)启动printJob:

printJob = new FlexPrintJob();
printJob.printAsBitmap = false;
printJob.start();

(2)获取打印页面尺寸。如果您的内容溢出,请使用它:

printerPageHeight = printJob.pageHeight;
printerPageWidth = printJob.pageWidth;

(3)创建所有动态对象并等待相应的 CREATION_COMPLETE 事件:

var componentsToBeInitialized:Number = 0;
var pages:Array = [];
for each (var itemData:Object in dataProvider) {
    var component:UIComponent = new PageComponent();
    someContainerOnTheDisplayList.addChild(component);
    component.data = itemData;
    componentsToBeInitialized ++;
    pages.push(component);
    component.addEventListener(FlexEvent.CREATION_COMPLETE, handlePageCompletion);
}

(4)等待所有 CREATION_COMPLETE 事件:

function handlePageCompletion(e:Event):void {
    componentsToBeInitialized --;
    if (componentsToBeInitialized == 0)
        printAllPages();
}

(5)打印页面:

function printAllPages():void {
   for each (var printPage:UIComponent in pages) {
   printJob.addObject(printPage);
   }         
   printJob.send();
}