为什么是jasperreport

一、为什么是jasperreport
         很简单两点:
    1 免费
    2 在大多数开源产品中最能满足本人/公司的需求.
       如果要一句话总结那么就是 "适合就好!" ,其次再想插一句"其实jasperreport可以做得更好,只是缺少大家去发现。" 

             在erp软件开发中一套强大易用的报表工具还是相当重要的地位,在这里我只针对一些日常业务报表.
              jasperreport + ireport 报表套装在普通的报表中已做得很不错:流水账式的,分组报表都可以轻松实现.在这里提出的是一些相对特别以及少用到的报表设计问题.
             当前版本 : jasperreport  1.1.0
                                 ireport  : 0.5.2

二、问题与解决
           
1.操作
        初用ireport 设计报表(特别是早期的版本)感觉还是比较原始,相对于birt 类似于在 Dreamweaver中画table 式的设计还是有点差距.但新版本(0.5.2)中也有不小的改善,增加了很多快速对齐,格式化的工具栏以及快捷操作方式.通过结合这些操作还算是方便了不少.

2.分页
           刚接触jasper report ,无论是看其官方的example还是自己动手设计报表,  html view 总给人很深的印象:"怎么字体那么小,而且实际打印一下,分页功能并没真正实现"
        经过客户一轮的抗义,最终还是下定决心去修补一下,
  其实jasper report 原理还是挺简单:
    它默认的分页方式是能过一轮的高度计算,再用两个<br>就以为了事了.[iocblog.net 来源]

<table>
<tr>
 
<td>
   
<table>
    
   
</table>
   
<br/> <!--两个br分行标记-->
   
<br/>
   
<table>
    
   
</table>
 
</td>
</tr>
</table>


       解决方案:
       好在jasperreport还提供了很好的扩展方案.它允许我们自定义分页方式(就是说在两页/table之间能让我们放自己的代码),自己定义betweenPagesHtml 就OK了,可以能过CSS定义分页.在这里,我就直接改它代码算了.大家可以自己选择.
    
net.sf.jasperreports.engine.export.JRHtmlExporter

<!--CSS代码-->
pageEnd 
{page-break-after:always}

 

if (betweenPagesHtml == null)
                        
{
                            writer.write(
"<br class=\"pageEnd\">");   // 原来是两个 <br/>
                        }
 else
                        
{
                            writer.write(betweenPagesHtml);
                        }

3. 打印[iocblog.net 来源]
      分页解决后可以发现当报表预览时真的能一页一页分得很好.却又发现了一个问题.报表明显不能满一张A4张大小(ireport 设计选择的是A4纸张),疑惑了一际子,其实不能算是BUG.
   ireport 报表属性中明显(21 * 29.7 CM) 一张A4纸的大小,为什么HTML出来的效果却明显小的那么多了.其实这与计算机的分辨率有关
   计算机中的分辨率,普遍是72 象素/英寸,而打印机普通是300象素/英寸.
   jasperreport 与ireport 默认单位是px,我猜想如果用CM做单位的话可以解决这个问题.但在这里我们的做法是尽量加大报表设计时的宽度与高度.另一个要注意的是记得将所有页边距设为0,因为这些设置在打印的时候已在IE/浏览器中设定了,不用重复.
   
4.分栏
      以前没多注意,但刚用ireport新版本时可以发现在报表属性设计的时候可以设置栏.这下子如果当报表主体部分列数不多时实现分栏显示,以节省纸张.

5.斑马线式显示报表主体
   
有时我们想让报表更美化,让用户更方便地观看数据,可以设置两种色相隔.这种效果在jasperreport 中的example中有demo一下,大家如果想学习可以下载看看.

6.交叉报表

   关于jasperreport的交叉报表设计网上还是有不小的讨论,而真正实现的不多.我观察过大多用jasperreport实现都是伪交叉报表.并不是真正实现真正的动态行与列.
   其实在jaspert report下载包中还是有个交叉报表的实现example(crosstabs),只不过据我了解,现在ireport还不能实现设计.只能通过手工写jrxml文件实现.本人小试一下,还是挺不错的.
 
三、待研究
 通过继承net.sf.jasperreports.engine.export.JRHtmlExporter ,还是能扩展不小的功能.例如用CSS格式化,可以大大减小代码量,动态列/可设列宽度大大增强我们的报表功能.
 现本人初部实现100%宽度,不再用jasperreport中hardcode列度等等,以下三点还有待时间去跟进:)

1.动态列
 
2.可设列宽度

3.CSS设计



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。