动态组件的 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 打印错误的主要内容,如果未能解决你的问题,请参考以下文章