我有一组动态添加到我的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将每个项目放在另一个下面的每个项目下面。
请感谢您提供的任何帮助。
此致 克雷格麦克
答案 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();
}