在Flex 4中滚动内容

时间:2011-02-28 18:28:58

标签: flex printing flex4 air adobe

我目前正在开发一个Adobe AIR应用程序,向用户显示一些图形数据。由于这个数据的高度更高,以适应屏幕高度,我把它放在一个卷轴内。

现在我想要打印这些可视化数据,主要是一些图表和列表,但我只看到一个页面,其中只包含当前用户可见的部分屏幕。我希望滚动条中的整个内容显示在页面上。

我尝试使用PrintJob和FlexPrintJob,但找不到解决方法。任何人都可以通过提供洞察力帮助我,一些源代码将不胜感激。

期待您的回复,

由于

1 个答案:

答案 0 :(得分:3)

这显然是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