1. 描述
JFreeChart 是 Java 平台上很好的一個開放圖表繪制類庫,不但可以生成多種圖表,并且可以産生 PNG 和 JPEG 格式的輸出,還可以與 PDF 和 Excel關聯。所以希望在我們報表工具可以直接引入第三方 JFreeChart 的圖表,使用報表單元格數據,如下圖效果:
2. 解決方案
FineReport 通過自定義函數,創建圖表數據源,将生成的 JFreeChart 圖表先轉換成圖片,然後在報表裏面展示。
3. 示例
3.1 創建一個表格數據源(dataset)
private CategoryDataset[] createDatasets(){裏面通過單元格擴展出來的數據定義圖表的數據源}
3.2 由 ChartFactory 産生 JFreeChart 對象
private JFreeChart createChart(CategoryDataset acategorydataset[]){設置圖表的一些屬性}
3.3 把 JFreeChart 圖表輸出成圖片
private BufferedImage createImage(int width, int height) {
CategoryDataset acategorydataset[] = createDatasets();
JFreeChart jfreechart = createChart(acategorydataset);
return jfreechart.createBufferedImage(width, height);
}
3.4 完整代碼詳見:
注:在Eclipse中導入第三方包jcommon-1.0.16.jar和jfreechart-1.0.13.jar,導入第三方包可參考文檔引用第三方jar包。
3.5 編譯并運行
1)編譯自定義函數
編譯 JFreeToChart.java 類生成 JFreeToChart.class 文件拷貝至報表應用所在目錄%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\function下。
2)注冊自定義函數
啓動設計器,點擊服務器>函數管理器,新增函數取名爲 JFreeToChart,選擇 JFreeToChart.class 類,如下圖:
此時自定義函數便定義好了,您可以在設計器中使用該函數。
3)使用自定義函數
注:圖表中使用的數據可以使用 内置數據集,具體數據爲模板預覽中左側的數據
如上圖 JFreeToChart 圖表數據由單元格擴展而來,在單元格中輸入公式=JFreeToChart(A2,B2),便可以顯示 JFreeChart 圖表了。
注:通過設計器預覽該模板之前,需要将 jcommon-1.0.16.jar和jfreechart-1.0.13.jar 這兩個 JAR 包放在%FR_HOME%\webapps\webroot\WEB-INF\lib下面,重啓設計器之後,再預覽。
3.6 模板預覽
分頁預覽,即可看到如下效果: