通过产生Image Map的方式实现图片上相应区域的超连接
目前版本的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图形报表样本
- temp.rar (33.3 KB)
- 描述: 产生出的带Image Map的html图形报表样本
- 下载次数: 532
分享到:
- 2007-01-23 12:32
- 浏览 5120
- 评论(2)
- 论坛回复 / 浏览 (0 / 6248)
- 查看更多
相关推荐
1. *.jrxml 文件配置 <textElement><font fontName="宋体" /...2.pom.xml中配置 <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports-fonts</artifactId> <version>6.1.2</version> </dependency>
JasperReports报表的介绍及其原理,里面还有小例子。
JasperReports,iReport制作报表,功能JAR 导入直接运行
poi.jar,jasperreports.jar,jfreechart.jar,commons-digester.jar,jcommon.jar,jackson-databind.jar,jackson-core.jar,jackson-annotations.jar
A Tutorial on JasperReports, iReport and JFreeChart
NULL 博文链接:https://qdjinxin.iteye.com/blog/350194
该资源讲解了如果用struts2 jasperReports在myeclipse中制作报表
jasperreports 生成报表 pdf excel xml 详细流程
jasperreports导出html,pdf,xls报表,spring-boot加maven,使用jasperreports6.0,不存在中文乱码问题
JasperReports 与Spring 或者 struts 的整合 含有jar ,主要工具类,报表文件, 整合注意请参考:http://blog.csdn.net/u010947651/article/details/65939310
开源报表打印组件JasperReports用法详解,开源报表打印组件JasperReports用法详解,开源报表打印组件JasperReports用法详解
JasperReports最终用户手册中文版报表设计分享.pdf
JasperReports开源报表概述和运行原理
iReport-JasperReports报表开发指南+操作手册 含书签
JasperReports 报表
jasperreports-html-component-6.5.0,jaspertReport HTML标签组件
iReport+jasperReports JAVA报表是款不错的java报表
JasperReports结合iReport制作报表教程