我目前正在开发一个Adobe AIR应用程序,向用户显示一些图形数据。由于这个数据的高度更高,以适应屏幕高度,我把它放在一个卷轴内。
现在我想要打印这些可视化数据,主要是一些图表和列表,但我只看到一个页面,其中只包含当前用户可见的部分屏幕。我希望滚动条中的整个内容显示在页面上。
我尝试使用PrintJob和FlexPrintJob,但找不到解决方法。任何人都可以通过提供洞察力帮助我,一些源代码将不胜感激。
期待您的回复,
由于
答案 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