动态组件的 Flex 4 打印错误

Posted

技术标签:

【中文标题】动态组件的 Flex 4 打印错误【英文标题】:Flex 4 Printing Error with dynamic components 【发布时间】:2011-11-20 00:59:29 【问题描述】:

我有一组动态添加到我的 Flex 4 阶段的组件。

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

我目前使用以下代码动态处理失败的项目:

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 将每页中的每一项放在其他 2 项之下。

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

问候 克雷格·麦克

【问题讨论】:

【参考方案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();

【讨论】:

非常感谢,这很有道理。因此,如果我想要每页 2 个项目,我会在显示中创建一个容器,如 vgroup,然后将两个组件放入其中,然后将 vgroup 附加到页面中。这确实使一切都到位。谢谢弗拉基米尔。另一个问题,我注意到这仅适用于某些打印机,您在打印某些内容时遇到任何问题。我注意到,当我打印到虚拟打印机时,一切正常,但是当我打印到 pdf 或 mdi 打印机以外的其他东西时,我得到了混合的打印结果,通常都坏了。有什么建议吗? 不知道这是否会改变任何事情,但值得尝试使用printJob.printAsBitmap = true; 打印,如果这改变了任何事情,请告诉我! 在 AddObject 中的第一个参数添加第二个“ShowAll”之后结果完全改变了行为,就好像底层组件中的某些层开始绘制一样。 我不记得遇到过这样的打印问题。出于调试目的,您可以做的一件事是在 Flash 显示器上放置您想要打印的确切视图 - 这可能表示布局问题等。 在屏幕上看起来一切正常,只有在使用名为 AnyChart 的 3rd 方组件时,不知道为什么,但现在似乎可以正常工作。

以上是关于动态组件的 Flex 4 打印错误的主要内容,如果未能解决你的问题,请参考以下文章

Flex 4 Spark 组件面板 - 隐藏标题栏

在 Flex 中使用 Flash 组件 SWC 文件

Flex打印

Flex 动态组件运行时创建

Flex:如何在动态创建中访问组件的属性?

Flash builder 4.6 Fake flex 错误