你好,推薦以下幾種:
專注于為中小企業(yè)提供網站制作、成都做網站服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)衛(wèi)濱免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了近1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現(xiàn)規(guī)模擴充和轉變。
JasperReports是一個基于Java的開源報表工具,它可以在Java環(huán)境下像其他IDE報表工具一樣來制作報表。JasperReports支持PDF、HTML、XLS、CSV和XML文件輸出格式。JasperReports是當前Java開發(fā)者最常用的報表工具。
Pentaho是一個以工作流為核心的、強調面向解決方案而非工具組件的BI套件,整合了多個開源項目,目標是和商業(yè)BI相抗衡。它偏向于與業(yè)務流程相結合的BI解決方案,側重于大中型企業(yè)應用。它允許商業(yè)分析人員或開發(fā)人員創(chuàng)建報表,儀表盤,分析模型,商業(yè)規(guī)則和BI流程。
OpenReports?是一個基于Web的報表解決方案,可為用戶提供通過瀏覽器查看動態(tài)創(chuàng)建的PDF、HTML或XLS格式報表的能力。OpenReports使用Java開發(fā)的,并使用JasperReports作為報表生成引擎。
JFreeReport?(現(xiàn)改名為Pentaho Reporting)是一個用來生成報表的Java類庫。它為Java應用程序提供一個靈活的打印功能并支持輸出到打印機和PDF,Excel,HTML和XHTML,PlainText,XML和CSV文件中。
JXLS是基于Jakarta POI API的Excel報表生成工具,可以生成精美的Excel格式報表。它采用標簽的方式,類似JSP標簽,寫一個Excel模板,然后生成報表,非常靈活,簡單!
BIRT是一個Eclipse-based開放源代碼報表系統(tǒng)。它主要是用在基于Java與J2EE的Web應用程序上。BIRT主要由兩部分組成:一個是基于Eclipse的報表設計和一個可以加到你應用服務的運行期組件。BIRT同時也提供一個圖形報表制作引擎。
JAVA POI
組件
//創(chuàng)建HSSFWorkbook對象
HSSFWorkbook
wb
=
new
HSSFWorkbook();
//創(chuàng)建HSSFSheet對象
HSSFSheet
sheet
=
wb.createSheet("sheet0");
//創(chuàng)建HSSFRow對象
HSSFRow
row
=
sheet.createRow((short)0);
//創(chuàng)建HSSFCell對象
HSSFCell
cell=row.createCell((short)0);
//用來處理中文問題
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//設置單元格的值
cell.setCellValue("單元格中的中文");
//定義你需要的輸出流
OutputStream
out
=
new
FileOutputStream("viwo.xls");
//輸出Excel
把數據庫中需要的數據處理后做成可視化圖表,根據不同需求可以做成不同形式的圖表,節(jié)省時間,效果比較好,報表軟件國外的話水晶報表,SAP公司的商業(yè)報表工具,作為SAP“集團”下的報表組件模塊。10年事前盛行一時,后被SAP收購。但水晶報表(Crystal Report)在理論上只支持單數據集,對多集的支持依賴于數據庫的運算能力(叉乘與聯(lián)合等或寫存儲過程),多庫一般難以支持。
國內的話FineReport,目前國內報表軟件領域發(fā)展最成熟也是市場份額最高的。IDC的報告里,17年甚至超過SAP,IBM,在這個細分領域,也是Gartner的BI選型市場指南里唯一推薦的報表工具。零代碼開發(fā),類似excel的設計方式,上手簡單。尤其數據字典、實際值和顯示值等的設計更是切入快速開發(fā)的要害,這些放在別的語言和體系下往往要大量代碼才能實現(xiàn)且頻繁需要的功能放在FineReport里卻只是幾個操作的事情。移動端報表+可視化大屏。
使用 JFreeChart 生成各種樣式的圖表
限于篇幅的問題我們在這里只實現(xiàn)兩種常用的圖表,其他類型圖表讀者可以觸類旁通。我們先給出柱狀圖的實現(xiàn),餅圖的實現(xiàn)再來跟柱狀圖進行比較。
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高級主題
很多情況我們不僅僅要求可以在瀏覽器上顯示一個圖表,我們更需要客戶可以直接在圖表上做一下交互的操作,例如獲取信息提示,點擊圖表某個部分進行更詳細信息的展示等等。例如前面生成的簡單柱狀圖,用戶需要在看到柱狀圖后點擊某種水果例如是蘋果即可看到各個地區(qū)蘋果產量的情況。為此就要求該圖形具有交互操作的功能。在 HTML 中為了讓一個圖像具有可交互的功能就必須給該圖像定義一個 Map 對象。下表節(jié)選一段具有該功能的 HTML 代碼:
MAP NAME="chartMap"
AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0category=100"
title="100 = 7,048"
onclick="javascript:clickChart('100');return false;"
AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0category=200"
title="200 = 6,721"
onclick="javascript: clickChart ('200');return false;"
AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0category=300"
title="300 = 5,929"
onclick="javascript: clickChart ('300');return false;"
AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0category=400"
title="400 = 5,005"
onclick="javascript: clickChart ('400');return false;"
AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0category=Diet"
title="Diet = 7,017" onclick="javascript:
clickChart ('Diet');return false;"
/MAP
由此就產生了一個問題:如果根據一個圖像來生成對應的 MAP 對象。我們回頭看看剛才的代碼,在創(chuàng)建一個圖表對象時候有兩個參數,我們舉柱狀圖的例子來講這兩個參數就是 ChartFactory. createBarChart3D 方法中的最后兩個參數,這兩個參數的類型都是布爾值。這兩個參數意思分別是:是否創(chuàng)建工具提示 (tooltip) 以及是否生成 URL。這兩個參數分別對應著 MAP 中一個 AREA 的 title 屬性以及 href 屬性。
可是我想知道的是怎么來產生這個 MAP 啊!哈哈,不要著急,JFreeChart 已經幫我們做好生成 MAP 對象的功能。為了生成 MAP 對象就要引入另外一個對象:ChartRenderingInfo。因為 JFreeChart 沒有直接的方法利用一個圖表對象直接生成 MAP 數據,它需要一個中間對象來過渡,這個對象就是 ChartRenderingInfo。
java生成報表功能,需要自己手動去寫,你可以使用第三方的api,集成到你的程序中,這樣可以快速實現(xiàn)報表功能。
盈帆報表可以為你提供你需要的api,幫助你實現(xiàn)報表功能,制作出各種復雜報表。更多信息你可以訪問:efreport.com