Печать содержимого внутри скроллера в Flex 4 - PullRequest
2 голосов
/ 28 февраля 2011

В настоящее время я работаю над приложением Adobe AIR, которое показывает пользователю некоторые графические данные. Поскольку эти данные больше по высоте, чтобы соответствовать высоте экрана, я поместил их в скроллер.

Теперь я хочу распечатать эти визуальные данные, в основном некоторые графики и списки, но я вижу только одну страницу, содержащую только ту часть экрана, которая в данный момент видна пользователю. Я хочу, чтобы весь контент внутри скроллера появлялся на странице.

Я пытался использовать PrintJob и FlexPrintJob, но не смог найти способ обойти. Может кто-нибудь, пожалуйста, помогите мне, предоставив понимание, некоторые исходные коды будут с благодарностью.

Жду ваших ответов,

Спасибо

1 Ответ

3 голосов
/ 20 апреля 2011

Это, очевидно, известная ошибка с библиотекой печати Flex и элементами управления Scroller.Вы можете прочитать о моих дискуссиях по этому вопросу здесь: http://forums.adobe.com/message/3626759

В качестве обходного пути я сделал следующее:

var printer:FlexPrintJob = new FlexPrintJob();

// Display the print dialog to the user.  If they choose a printer
// and click "print", this method will return true, and we will
// spool the job to the printer they selected. If they hit cancel,
// this method will return false, and we will not attempt to send
// anything to the printer.
if(printer.start()){
     // Add some padding before spooling the object to the printer.
     // This will give it a reasonable margin on the printout.
     itemsToPrintContainer.paddingBottom = 100;
     itemsToPrintContainer.paddingTop = 100;
     itemsToPrintContainer.paddingLeft = 100;
     itemsToPrintContainer.paddingRight = 100;


     this.removeElement(itemsToPrintContainer);
     FlexGlobals.topLevelApplication.addElement(itemsToPrintContainer);
     printer.addObject(itemsToPrintContainer);
     printer.send();
     FlexGlobals.topLevelApplication.removeElement(itemsToPrintContainer);
     this.addElement(itemsToPrintContainer);

     // Reset the margins to 0 for display on the screen.
     itemsToPrintContainer.paddingBottom = 0;
     itemsToPrintContainer.paddingTop = 0;
     itemsToPrintContainer.paddingLeft = 0;
     itemsToPrintContainer.paddingRight = 0; 
}

То, что я делаю, - это перемещение объекта, который я хочу напечататьвне скроллера, распечатайте его, а затем переместите обратно внутрь скроллера, чтобы пользователь не знал о каких-либо изменениях.Пользователь может увидеть короткую вспышку на экране, пока все переставляется, но для моего случая это было приемлемо.

Кроме того, заполнение было попыткой добавить поле для моего печатного материала.Это не будет работать правильно, если у вас есть несколько страниц.Возможно, вы не захотите добавлять отступы в вашем конкретном случае.

-Josh

...