如何打印未在屏幕上显示的动态创建的Flex组件/图表?

我有一些我在Flex中创建的图表组件。基本上我已经设置了一个特殊的UI,允许用户选择他们想要打印的这些图表。当他们按下打印按钮时,每个所选图表都是动态创建的,然后添加到容器中。然后我将此容器发送到FlexPrintJob。 即
    private function prePrint():void
    {
        var printSelection:Box = new Box();
        printSelection.percentHeight = 100;
        printSelection.percentWidth = 100;
        printSelection.visible = true;

        if (this.chkMyChart1.selected)
        {
            var rptMyChart1:Chart1Panel = new Chart1Panel();
            rptMyChart1.percentHeight = 100;
            rptMyChart1.percentWidth = 100;
            rptMyChart1.visible = true;
            printSelection.addChild(rptMyChart1);
        }

        print(printSelection);
    }


    private function print(container:Box):void
    {
        var job:FlexPrintJob;

        job = new FlexPrintJob();

        if (job.start()) {
            job.addObject(container, FlexPrintJobScaleType.MATCH_WIDTH);
            job.send();
        }

    }
如果图表实际显示在页面的某个位置但是如上所示动态添加图表则不行,此代码可以正常工作。出现打印对话框,但按OK后没有任何反应。 所以我真的有两个问题: 如果在屏幕上看不到弹性组件/图表,是否可以打印? 如果是这样,我该怎么做/我做错了什么? 更新: 好吧,至少有一件事是我使用了宽度和高度的百分比。当Box不包含在另一个对象中时,使用百分比并不合理。将高度和宽度更改为固定值实际上允许打印进度并解决我的初始问题。
    printSelection.height = 100;
    printSelection.width = 100;
但是出现了一个新问题,而不是看到我的图表,而是看到了一个黑盒子。我之前通过将图表的背景颜色设置为#FFFFFF来解决此问题,但这次似乎不起作用。 更新2: 我在adobe网站上看到了一些将容器添加到应用程序但不包含在布局中的示例。这看起来像是要走的路。 即
    printSelection.includeInLayout = false;
    addChild(printSelection);
    
已邀请:
你的组件必须在舞台上才能绘制其内容,所以你应该尝试这样的事情: printSelection.visible = false; application.addChild(printSelection); printSelection.width = ..; printSelection.height = ...; ... 然后做打印     
我不完全确定,但在我的一个应用程序中,我必须打印出一个完整的Tab Navigator,我发现打印它的唯一方法是自动滚动tabnavigator选项卡,以便在我添加时在屏幕上显示组件他们到printjob。 通过这种方式,他们都打印出来。在我创建tabnaviagotr之前,滚动打印(到PDF)结果是一个文件,其中包含选项卡的所有页面,但只有真正打印的屏幕上可见的文件。     

要回复问题请先登录注册