转载地址:http://bbs.9ria.com/viewthread.php?tid=69890
在上一讲里面,我们知道怎样用Flex的PrintDataGrid,它在我们的程序只有一个大的DataGrid的时候工作良好。然而,在平常的应用中,你经常会在程序中包含很多容器和组件(VBox, HBox, Text, Image, DataGrid)。那么想想看,你仍然会在使用flex打印函数时遇到困难。
实际上,我们会遇到不仅仅是上面那一个问题?比如打印预览。你为什么需要打印预览呢?因为你的老板会设法降低每一分钱的成本。没有人喜欢看到你打印100页,才明白打印错了。再加上节约用纸对我们的地球母亲好。
不幸的是,直到Flex 3中,Adobe对于多页打印或打印预览都没有提供一个很好的解决办法(除了客户端的产品如安装PDF打印机)。
FlexReport
正如我以前提到的,我的第一个flex工作就是寻找一个好的办法去打印多页。所以,我查询了很多第三方的成果。我在那段时间非常沮丧,因为看起来好像所有人都在关注flex的布局,动画和后端系统整合,没有人关心这么一个低级的工作(打印),难怪Adobe不急于给打印提供一个更好的支持。
最终,我把目光投向了一个开源工程(FlexReport)。经过彻底的查看它的源码和例子程序,我不得不说FlexReport是目前为止一个最好的解决Flex打印问题的答案。
你可以从下面这些网址找到关于FlexReport的资料:
1. FlexReport 介绍
http://www.kemelyon.com/bts/2008/01/14/flexreport/
2. FlexReport Demo
http://www.kemelyon.com/flexreport/0_2rc1/
3. FlexReport源程序下载
http://www.kemelyon.com/flexreport/srcview/FlexReport.zip
提示:
如果你在运行上面链接中下载的原始FlexReport时遇到错误时,你可以下载我使用的版本。我解决的一些类的引用问题,它在flex3中运行良好。
作者的例子在附件里面flexreportdemo.zip(237.46 KB)
FlexReport能帮你做什么
最好的知道FlexReport能帮你做什么的方式是去用它,下载一个然后在你的flexbuilder中使用它。
我发现FlexReport在下面三种情况下工作非常好:
1:打印预览
通过Bitmap来生成打印页面,从而提供一个很好的预览效果。 使用 一个内置的PDF打印机,无需用户安装另外的软件。
2:报表布局
创建一个提前不知道有多少页面的动态报告。
3. 多页的文字打印
除了PrintDataGrid,还增加了一个长文本打印PrintText。
FlexReport的缺点:
FlexReport的最大的问题是它假设你的Flex组件(控件和容器),主要是垂直堆叠的。例如,你在顶部有一个TextArea,紧接着在TextArea底部有一个DataGrid,然后在DataGrid下面来一个Image。
然而,许多公司表单形式不是这样的,他们通常会混合垂直与水平布局。例如,你可能有3个标签,2个文本区,和2幅图片横向排列,而其他2 个DataGrid的,2个文本,3张图片垂直对齐。 FlexReport在这种情况下可能会打印出一些错误的页面。
结论:
FlexReport对于不太关键Flex的打印作业是一个很好的解决方案。它增强了在打印预览,报表的布局,以及多页的文本打印的功能。但是,FlexReport在处理一些复杂公司报表时仍然有一些问题,特别是一些水平垂直混合式布的。
那么,怎样才能让我们从FlexReport进一步提高呢?为此,你需要知道Flex框架的一些概念和的实现。这将包括在我们的下一个教程- 从A到Z了解Flex的打印工作