浏览 6264 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-23
目前版本的ireport提供的可视化报表设计界面上无此功能,同时jasperreports也没有实现. 需要修改的几个Class: 1)net.sf.jasperreports.engine.fill.JRBaseFiller 通过这个Class传递一些用户设定的参数 增加一个参数:表示是否需要在图形报表中加超连接 修改的代码如下: a)实例变量中加上: protected boolean isNeedHref; b)在protected void setParameters(Map parameterValues) throws JRException这个方法中加上: if(parameterValues.get(JRParameter.IS_NEED_HREF)!=null){ isNeedHref=((Boolean)parameterValues.get(JRParameter.IS_NEED_HREF)).booleanValue(); } JRParameter.IS_NEED_HREF这个是新增的 c)增加一个方法 protected boolean isNeedHref(){ return isNeedHref; } 2)net.sf.jasperreports.engine.fill.JRFillChart 这个Class负责调用jfreechart产生图表 将evaluate***Image()方法中调用ChartFactory.createBarChart()的最后一个参数改为filler.isNeedHref () 3)net.sf.jasperreports.engine.export.JRHtmlExporter 这个Class负责输出html格式的报表 a)增加一个实例变量: protected boolean isWriteImageMap = false; 当我们的程式传递参数的时候可以选择是否产生Image Map的动作 b) 修改方法public void exportReport() throws JRException : 增加如下代码: Boolean isWriteImageMapParameter = (Boolean)parameters.get(JRExporterParameter.IS_WRITE_IMAGE_MAP); if (isWriteImageMapParameter != null){ isWriteImageMap = isWriteImageMapParameter.booleanValue(); } JRExporterParameter.IS_WRITE_IMAGE_MAP这个也是新增的 c)修改方法protected void exportImage(JRPrintImage image, JRExporterGridCell gridCell): 方法的第一行加两个String变量: String mapString = ""; String mapName = ""; 在代码imagePath = imagesURI + imageName;后一行加上 if(isWriteImageMap&&renderer instanceof JCommonDrawableRenderer){ JFreeChart o = ((JCommonDrawableRenderer)renderer).getJFreeChart(); if(o!=null){ ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); try { ServletUtilities.saveChartAsJPEG(o, image.getWidth() , image.getHeight(), info, null); mapName = "Map"+imageName; mapString = ChartUtilities.getImageMap("Map"+imageName, info ,new StandardToolTipTagFragmentGenerator(),new StandardURLTagFragmentGenerator ()); mapName = " usemap=\"#"+mapName+"\" "; } catch (Exception e1) { e1.printStackTrace(); } } } 最后将该方法的最后几行代码 writer.write(" alt=\"\"/>"); if (href != null){ writer.write("</a>"); } writer.write("</td>\n"); 改为 writer.write(" alt=\"\""+mapName+"/>"); if (href != null){ writer.write("</a>"); } writer.write("</td>\n"); if(mapString!=null&&mapString.trim().length()>0) writer.write(mapString+"\n"); 也可以自己去实现org.jfree.chart.imagemap.URLTagFragmentGenerator 这个接口,然后替换掉 StandardURLTagFragmentGenerator,决定超连接的方式,可以是我们自己定义的javascript方法等等. 当我们的自己的程式需要产生带超连接的图形报表时,在程式中需要这样做: parameters.put(JRParameter.IS_NEED_HREF, Boolean.valueOf(true)); exporter.setParameter(JRHtmlExporterParameter.IS_WRITE_IMAGE_MAP,Boolean.valueOf(true)); 付上一个产生出的html图形报表样本 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |