文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发JavaJasperReport经验谈
精品推荐
特别推荐
·实例讲解:Java中的SOAP技术
·Java语言出现的背景 影响及前景
·Java精华积累:初学者都应该搞懂的问题
·Java多媒体框架设计自动播放机实例详解
·如何有效防止Java程序源码被人偷窥?
·Cell插件在J2EE系统中的应用
·初学者想学Hibernate,初级基础教程
·Java语言实现支持视频点播的WEB服务器
·关于Java编程的中文问题的几条分析原则
·确保J2ME无线移动商业应用程序的安全性
热点TOP10
·SCJP认证套题解析(1)
·好东西介绍,直接用 java 命令行动态生成jpg文件
·JavaClassLoader与Package机制
·反射在Java Swing编程中的应用
·基于Java的界面布局DSL的设计与实现
·垃圾清理势在必行——Java垃圾收集算法
·Java应用技巧:对于 Cookie 的操作详解
·Java编译器对于String常量表达式的优化
·基于Java的界面布局 DSL 的设计与实现
·JAVA和.NET两个平台对于安全功能的比较

JasperReport经验谈

日期:2008年6月4日 作者: 查看:[大字体 中字体 小字体]


JasperReport和iReport是不错的Java报表工具. 在实际项目中, 本人用它们开发了20个Report, 涉及SubReport, Image, Graph, 积累了一些经验. 尤其是关于Export到Excel方面, 文档上也很少提及, 纯粹是摸索出来的, 有的问题还是通过读源代码才解决的. 此贴并非入门教程, 差不多算是笔记吧, 以问答形式记录. 

  1. iReport
  2. 安装
    1. 下载,解压iReport 0.4.0 (推荐src版本)
    2. 确认JDK是1.4以上
    3. 把JDK /lib下的tools.jar拷贝到{ireport_home}/lib目录中
  3. 运行
    1. 对于下载的Binary版本,只能运行/bin/startup.bat
    2. 对于下载的Src版本,可以通过ant iReport运行(先安装ant)
    3. 如果运行startup.bat,出现java.lang.NoSuchMethodError错误,一般是JDK版本太低。如果确认已安装了1.4或以上,检查path系统变量,看看有1.3的JRE是不是排在前面(比如安装了Oracle的客户端,往往有1.3的JRE),如果出现Class Not Found,检查classpath。对于通过ant的方式运行,一般都没什么问题,所以推荐下载src版本
  4. JasperReport 常见问题
    1. .jrxml vs .jasper
      • 如果在运行时载入.jrxml, 那么每次调用还得编译, 不如预先编译成.jasper.不过预先编译的jasper,必须用同样版本的JasperReport载入,而且灵活性差些. 不过对于大部分报表,还是预先编译成jasper方便
    2. 如果批量编译jrxml
      • 用Ant很容易解决

         

        .....

         

    3. 如何使用图片?
      • 很容易,用Image控件就可以了. 在Image Express里面可以用String来表示图片的路径, 或者用InputStream, File对象.不过不管用File还是String对象, 都不得不用绝对路径, 这显然很不灵活. 解决办法是,穿入一个$P的参数,表示图片所在的目录,然后用$P和文件名拼接出完整的绝对路径. 更好的方法是用InputStream, 例如this.getClass().getResourceAsStream("logo.jpg") ,这时只要把图片放在当前.jasper所在的目录就可以了,不必考虑什么参数,什么路径了
    4. 显示非数据库字段变量
      • 显示如运行日期等,可以直接在Text Field里面输入new java.util.Date(), 然后把Pattern设成如mm/dd/yyyy.
    5. 动态控制某些Field是否显示
      • 每个Static Text, Text Field甚至整个Band的属性里面都有Print When Expression, 比如设成new Boolean(!$P{isDisplay}.equalsIgnoreCase("yes")), 那么只有当参数display的值为yes的时候才显示
    6. 使用Sub Report, 如何使用相对路径
      • 见1.3, 和使用图片类似, 用InputStream或者传入参数
    7. Query里面如何使用参数
      • $P!{xxx} 或者 $P{xxx} 后者只能用于类似PreparedStatement参数绑定, 而前者可替换Sql的任意部分. 在需要动态排序的时候, 前者特别有用. 比如 select a,b,c from t order by $P!{orderClause}   不管用$P还是$P!, SQL最终是以PreparedStatement方式执行的, 不必太担心性能问题   注意:参数是不能嵌套的, 比如$P{a} =''$P{b}''   , $P{b}=''value'', 不要指望$P{a}能被替换成''value''
    8. 如何使用图表(Graph)
      • JasperReport本身没有图表功能, 只有显示Image的功能(见4.3). iReport里有个Graph向导, 其实质是通过jFreeChart生成Image. 更另外, 更直接的做法是放一个Image控件, Image Express Class设置成java.awt.Image, 在Image Expression里通过自定义的类返回java.awt.Image对象. 例如''GraphProvider.getImage($P{REPORT_DATASOURCE},title, subtitle.....)''.  GraphProvider是自己的类, public static Image getImage(JRDataSource, ....)
    9. 如果显示多个图表
      • 在一张报表上显示一个图表和显示多个图表是不同的. 假设Query是select name,price,qty from xxx, 第一张图显示name-price, 第二张图显示name-qty, 如果还是按3.8的方法, 第二张图根本显示不出来! 为什么  因为传入的是JRDataSource, 而JRDataSource仅仅是对ResultSet的简单封装, 在第一张图处理完后, 游标已经到了eof位置了, 在开始处理第二张图的时候,就必然抛出游标耗尽的异常! 怎么办   自己写个JRDataSourceAdapter, 把JRDataSource对象里面的值预先保存到一个Collection (相当于一个Offline的数据集), 然后把这个Collection传个getImage方法. 具体是, 建一个Variable  mydate, 类型是java.util.Map, Calculation Type- System, Initial Value Expression是JRDataSourceAdapter.JRDataSource2Map($P{REPORT_DATA_SOURCE},new String[]{"NAME","PRICE","QTY"},new Class[]{java.lang.String.class,java.lang.Double.class,java.lang.Double.class}), JRDataSource2Map是自己写的一个Adapter. 然后在Image的Expression里面换成如''GraphProvider.getImage(mydata,title, other params...), 当然得修改getImage方法
  5. Export到Excel的问题
    1. 如何去掉报表头等
      • 直接把不需要的Band删除(把其高度设为0). 如果仅仅是export到Excel的时候不需要报表头, 而输出到PDF等仍然需要保留, 那么使用print when expression, 见4.4
    2. 如果让Excel看起来整齐
      • 不要有空白地方! 首先把所有的Field设成一样高, 对齐! 把所在Band的高度也设成和Field一样高, 让Field正好放入Band. 然后调整Field的宽度, 让每个Field都相邻,没有空隙. 最后,记得设置参数: exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,

        [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 下一页 




        上一篇:纪念Java经典的SandBox概念

        下一篇:设计模式研究--Proxy Model

相关文章:
·男人引以为戒的性经验
·四川麻将经验全攻略
·网上开店经验谈—淘宝商户教你如何网上赚钱
·经营理念:经商做生意100个成功经验
·生意人如何做生意:100个成功经验告诉您
·英语名言警句之经验篇(英汉对照)
·个人网站做联盟广告的几点经验
·OCR软件使用经验谈
·[战士]龙骑打扎的一些经验
·[综合交流]一点砸卷的小经验
相关软件:
·Photoshop使用经验集合
·英语学习经验集萃电子书
·从理想主义到经验主义
·国家司法考试经验教训谈
·李国锋的逆向法学习英语经验
·简历模板二(供有工作经验者参考)
·历史的经验
·教 NX工作室 专业形象讲座 成功人士的经验 帮你走向成功
·看雪论坛精华编程经验集合
·李阳疯狂英语成功经验谈

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot