У меня есть несколько компонентов диаграммы, которые я создал во 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.
Поэтому у меня действительно есть два вопроса:
- Можно ли печатать гибкие компоненты / диаграммы, когда они не видны наэкран?
- Если да, то как мне это сделать / что я делаю не так?
ОБНОВЛЕНИЕ:
Ну, напо крайней мере одна вещь неправильная - мое использование процентов в ширине и высоте.Использование процентов не имеет смысла, когда Box не содержится в другом объекте.Изменение высоты и ширины на фиксированные значения фактически позволяет печати прогрессировать и решает мою первоначальную проблему.
printSelection.height = 100;
printSelection.width = 100;
Но возникает новая проблема, заключающаяся в том, что вместо просмотра графика вместо этого я вижу черный ящик.Ранее я решил эту проблему, установив цвет фона диаграммы на #FFFFFF, но на этот раз это не работает.
ОБНОВЛЕНИЕ 2:
Я видел несколько примеров на сайте Adobe, которые добавляют контейнер в приложение, но не включают его в макет.Это похоже на путь.
т.е.
printSelection.includeInLayout = false;
addChild(printSelection);