Ошибка печати Flex 4 с динамическими компонентами - PullRequest
1 голос
/ 19 сентября 2011

У меня есть набор компонентов, которые динамически добавляются в мой этап 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, чтобы размещать каждый элемент один ниже другого на каждой странице.

Пожалуйста, и спасибо за любую помощь, которую вы можете предоставить.

С уважением, Крейг Мак

1 Ответ

1 голос
/ 19 сентября 2011

Рецепт печати динамического содержимого обычно выглядит следующим образом:

(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();
}
...