我们所说的”支持”Java的报表工具.其实就是非Java的报表工具,但是可以在Java程序中调用. 这样的产品很多,总的讲一大类是采用独立报表服务器的,如Bo/Crystal Report,Brio,Cognos等等,另一大类是在前端有控件的,如数巨报表等。
关于Java的报表工具 我们可以到思迈特软件Smartbi了解一下,广州思迈特软件Smartbi有限公司(思迈特软件Smartbi)成立于2011年,致力于为企业客户提供一站式商业智能解决方案,以提升和挖掘企业客户的数据价值。
“思迈特软件Smartbi”是企业级商业智能和大数据分析品牌,经过多年持续自主研发,凝聚大量商业智能最佳实践经验,整合了各行业的数据分析和决策支持的功能需求。
报表工具靠不靠谱,来试试Smartbi,思迈特软件Smartbi经过多年持续自主研发,凝聚大量商业智能最佳实践经验,整合了各行业的数据分析和决策支持的功能需求。满足最终用户在企业级报表、数据可视化分析、自助探索分析、数据挖掘建模、AI智能分析等大数据分析需求。
思迈特软件Smartbi个人用户全功能模块长期免费试用
马上免费体验:Smartbi一站式大数据分析平台
使用 JFreeChart 生成各种样式的图表限于篇幅的问题我们在这里只实现两种常用的图表,其他类型图表读者可以触类旁通。我们先给出柱状图的实现,饼图的实现再来跟柱状图进行比较。
1 柱状图
package lius.chart.demo
import java.io.*
import org.jfree.data.*
import org.jfree.chart.*
import org.jfree.chart.plot.*
/**
* 该类用于演示最简单的柱状图生成
* @author Winter Lau
*/
public class BarChartDemo {
public static void main(String[] args) throws IOException{
CategoryDataset dataset = getDataSet2()
JFreeChart chart = ChartFactory.createBarChart3D(
"水果产量图", // 图表标题
"水果", // 目录轴的显示标签
"产量", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是 false)
false, // 是否生成工具
false // 是否生成 URL 链接
)
FileOutputStream fos_jpg = null
try {
fos_jpg = new FileOutputStream("D:\\fruit.jpg")
ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null)
} finally {
try {
fos_jpg.close()
} catch (Exception e) {}
}
}
/**
* 获取一个演示用的简单数据集对象
* @return
*/
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset()
dataset.addValue(100, null, "苹果")
dataset.addValue(200, null, "梨子")
dataset.addValue(300, null, "葡萄")
dataset.addValue(400, null, "香蕉")
dataset.addValue(500, null, "荔枝")
return dataset
}
/**
* 获取一个演示用的组合数据集对象
* @return
*/
private static CategoryDataset getDataSet2() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset()
dataset.addValue(100, "北京", "苹果")
dataset.addValue(100, "上海", "苹果")
dataset.addValue(100, "广州", "苹果")
dataset.addValue(200, "北京", "梨子")
dataset.addValue(200, "上海", "梨子")
dataset.addValue(200, "广州", "梨子")
dataset.addValue(300, "北京", "葡萄")
dataset.addValue(300, "上海", "葡萄")
dataset.addValue(300, "广州", "葡萄")
dataset.addValue(400, "北京", "香蕉")
dataset.addValue(400, "上海", "香蕉")
dataset.addValue(400, "广州", "香蕉")
dataset.addValue(500, "北京", "荔枝")
dataset.addValue(500, "上海", "荔枝")
dataset.addValue(500, "广州", "荔枝")
return dataset
}
}
2 饼图
package lius.chart.demo
import java.io.*
import org.jfree.data.*
import org.jfree.chart.*
/**
* 用于演示饼图的生成
* @author Winter Lau
*/
public class PieChartDemo {
public static void main(String[] args) throws IOException{
DefaultPieDataset data = getDataSet()
JFreeChart chart = ChartFactory.createPie3DChart("水果产量图", // 图表标题
data,
true, // 是否显示图例
false,
false
)
// 写图表对象到文件,参照柱状图生成源码
}
/**
* 获取一个演示用的简单数据集对象
* @return
*/
private static DefaultPieDataset getDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset()
dataset.setValue("苹果",100)
dataset.setValue("梨子",200)
dataset.setValue("葡萄",300)
dataset.setValue("香蕉",400)
dataset.setValue("荔枝",500)
return dataset
}
}
3将生成的图表移到浏览器上
package lius.chart.demo
import java.io.IOException
import javax.servlet.*
import javax.servlet.http.HttpServlet
import org.jfree.data.*
import org.jfree.chart.*
/**
* 演示通过 servlet 直接输出图表
* @author Winter Lau
*/
public class ChartDemoServlet extends HttpServlet {
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
res.setContentType("image/jpeg")
DefaultPieDataset data = getDataSet()
JFreeChart chart = ChartFactory.createPie3DChart("水果产量图",
data,
true,
false,
false
)
ChartUtilities.writeChartAsJPEG(res.getOutputStream(),
100,chart,400,300,null)
}
/**
* 获取一个演示用的简单数据集对象
* @return
*/
private static DefaultPieDataset getDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset()
dataset.setValue("苹果",100)
dataset.setValue("梨子",200)
dataset.setValue("葡萄",300)
dataset.setValue("香蕉",400)
dataset.setValue("荔枝",500)
return dataset
}
}
4高级主题
很多情况我们不仅仅要求可以在浏览器上显示一个图表,我们更需要客户可以直接在图表上做一下交互的 *** 作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。例如前面生成的简单柱状图,用户需要在看到柱状图后点击某种水果例如是苹果即可看到各个地区苹果产量的情况。为此就要求该图形具有交互 *** 作的功能。在 HTML 中为了让一个图像具有可交互的功能就必须给该图像定义一个 Map 对象。下表节选一段具有该功能的 HTML 代码:
<MAP NAME="chartMap">
<AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0&category=100"
title="100 = 7,048"
onclick="javascript:clickChart('100')return false">
<AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0&category=200"
title="200 = 6,721"
onclick="javascript: clickChart ('200')return false">
<AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0&category=300"
title="300 = 5,929"
onclick="javascript: clickChart ('300')return false">
<AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0&category=400"
title="400 = 5,005"
onclick="javascript: clickChart ('400')return false">
<AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0&category=Diet"
title="Diet = 7,017" onclick="javascript:
clickChart ('Diet')return false">
</MAP>
由此就产生了一个问题:如果根据一个图像来生成对应的 MAP 对象。我们回头看看刚才的代码,在创建一个图表对象时候有两个参数,我们举柱状图的例子来讲这两个参数就是 ChartFactory. createBarChart3D 方法中的最后两个参数,这两个参数的类型都是布尔值。这两个参数意思分别是:是否创建工具提示 (tooltip) 以及是否生成 URL。这两个参数分别对应着 MAP 中一个 AREA 的 title 属性以及 href 属性。
可是我想知道的是怎么来产生这个 MAP 啊!哈哈,不要着急,JFreeChart 已经帮我们做好生成 MAP 对象的功能。为了生成 MAP 对象就要引入另外一个对象:ChartRenderingInfo。因为 JFreeChart 没有直接的方法利用一个图表对象直接生成 MAP 数据,它需要一个中间对象来过渡,这个对象就是 ChartRenderingInfo。
1:FreeReportBuilder是一个Java报表工具,可以与任何数据库正常工作,只需要有一个JDBC驱动程序。2:JMagallanes是一个开源的使用Java/J2EE开发的Olap和动态报表应用程序。JMagallanes结合了静态报表(基于
JasperReports),Swing
pivot表格(用于OLAP分析),和图表(基于JFreeChart)。它可从多种数据源(如:SQL,Excel,XML和其它)读取数据并可生成
多种输出如:PDF,XML,应用程序特殊文件用于将来报表的脱机查看。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)