Как напечатать динамически созданный компонент / диаграмму Flex, который не отображается на экране? - PullRequest
0 голосов
/ 24 января 2011

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

Поэтому у меня действительно есть два вопроса:

  1. Можно ли печатать гибкие компоненты / диаграммы, когда они не видны наэкран?
  2. Если да, то как мне это сделать / что я делаю не так?

ОБНОВЛЕНИЕ:

Ну, напо крайней мере одна вещь неправильная - мое использование процентов в ширине и высоте.Использование процентов не имеет смысла, когда Box не содержится в другом объекте.Изменение высоты и ширины на фиксированные значения фактически позволяет печати прогрессировать и решает мою первоначальную проблему.

    printSelection.height = 100;
    printSelection.width = 100;

Но возникает новая проблема, заключающаяся в том, что вместо просмотра графика вместо этого я вижу черный ящик.Ранее я решил эту проблему, установив цвет фона диаграммы на #FFFFFF, но на этот раз это не работает.

ОБНОВЛЕНИЕ 2:

Я видел несколько примеров на сайте Adobe, которые добавляют контейнер в приложение, но не включают его в макет.Это похоже на путь.

т.е.

    printSelection.includeInLayout = false;
    addChild(printSelection);

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Ваш компонент должен быть на сцене, чтобы нарисовать его содержимое, поэтому вы должны попробовать что-то вроде этого:

printSelection.visible = false;

application.addChild(printSelection);

printSelection.width = ..;

printSelection.height = ...;

... затем выполните печать

0 голосов
/ 24 января 2011

Я не совсем уверен, но в одном из моих приложений мне нужно распечатать полный Tab Navigator, и единственный метод, который я нашел, чтобы распечатать его, это автоматически прокрутить вкладку tabnavigator, чтобы показать компонент на экранекогда я добавляю их в printjob.

Таким образом, они все печатаются.До того, как я создал tabnaviagotr, прокручивая результат печати (в PDF), был файл со всеми страницами вкладки, но только тот, который виден на экране, действительно напечатан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...