我的Flex Air的报表打印方案

阅读更多
偶在用flex air开发系统时,遇到需要展现并打印报表的需求,经过一番斟酌,对可采取的多种解决方案做了下归纳和排选,下面我将选型的过程描述一下:
首先报表需求很大众化:
1、有打印预览,可手工调整打印相关设置。
2、报表形式可以为列表或表单形式的,有报表头尾。
3、行列均可单元格合并。尤其行值相同分组显示时,可以设定行合并。
  我的Flex Air的报表打印方案_第1张图片
4、免费。
5、简单易用,减少开发成本。尤其报表定义,越简单越好。
5、客户系统安装要求简单。
  • 用flex来实现
  • 可以调用FlexPrintJob进行打印设置。
    缺点是:开发比较底层,无打印预览功能,不能满足快速实现多种不同报表的打印。排除!
  • 用flex第三方类库
  • 找了的两个,一个是开源的FlexReport,它提供了打印预览功能,但看了一下,合并单元格功能未实现,网上有评中文支持有问题,貌似使用起来很耗时间成本(偶只打算花2天时间^_^),pass掉!
    另一个是商业类库,叫MyReport,看例子功能貌似很好,需求都满足了。不过免费版本功能没有合并行单元格功能,高版本5k大洋,对本屌丝系统来说价格过高,放弃!
  • 用flex之外的开源解决方案
  • 采用IReport做模板设计,jasperReport做引擎,提供了转换成flash显示的插件。不过经过查证,ireport居然不支持行合并,可惜。因时间关系其他开源项目没做一一功能验证。发现网上比较普及的开源解决方案很多采用了jasperReport报表引擎,而其功能恰恰少了这块。
  • 采用Excel实现报表及打印预览
  • 至于Air程序中显示预览内容,最方便是显示flash形式报表,但服务器端生成swf,性能比较慢。因为jasperReport引擎功能不给力,不能生成有合并行格式的报表,所以就得自己生成excel报表文件了,excel先转pdf,再转swf。而转pdf时,可以采用openoffice或excel软件来辅助,或者用虚拟打印机之类辅助生成,这个过程其特点就是一个字“慢”!且跨进程不稳定,程序耦合程度高不绿色,这不科学。
    如果将生成的excel文件放到客户端直接显示,服务器端实现比生成pdf和swf更有优势。采用Excel做报表方案时不得已的选择,原理简单,代码可控,感觉比较靠谱一点。再看客户端,因为Air程序,它来打开本地程序不受限制,而Excel是客户很常用的工作软件,可以要求必装,这不是问题。


下面说下我的报表生成方案
1、服务器端是java实现的,采用的是poi库根据已定义好的excel模板,填充数据后生成excel文件,这样定义报表非常方便,只需设计excel即可。对excel操作也都有现成的api,我做了xls模板行复制、行插入、数据填充、行合并等功能封装。注意,其中的行插入功能poi没有提供合适的api,我是通过复制移动插入点后面的行数据来完成的。
2、在flex里要调用excel来预览显示,就得和js打交道,而我没有采用html控件,因为air sdk嵌入的webkit内核是不支持activex的,用ie显示还得要求用户降低ie安全级别,麻烦。幸运的是,我只需要直接调用wscript.exe来运行含有操作ActiveXObject("Excel.Application")的js或vbs脚本就行了,在脚本中启动excel显示预览,然后关闭Excel。在这里我建议用vbs,可以把vba中的各种函数或Excel宏都利用上,功能更加灵活些。wscript.exe在system32下,所有windows系统都有,这点也不用偶操心啦~


这个过程用了两天多时间,主要花费在下载试用各种引擎、开源组件选型上了,因为种种限制或研究不到位,最终选择了自己实现的道路。如果你的报表需求不复杂,又想简单实现,希望我的方案会有所帮助
  • 我的Flex Air的报表打印方案_第2张图片
  • 大小: 1.6 KB
  • 查看图片附件

你可能感兴趣的:(flex,air,excel,脚本,flash)