最近領導讓倒騰java生成pdf報告,裏面有幾個圖表須要生成,雷達圖柱狀圖之類的。。。javascript
package cn.exrick.xboot.common.utils;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.SpiderWebPlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RectangleEdge;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* @MethodName: 生成雷達圖、柱狀圖工具類
* @Description: TODO
* @Param:
* @Return:
* @Author: Jiangsy
* @Date: 2019/8/7
**/
public class JFrameUtils {
public static void main(String args[]) {
JFrame jf = new JFrame();
jf.add(erstelleSpinnenDiagramm());
jf.pack();
jf.setVisible(true);//true會彈出預覽的彈層,false就不彈出了
savePic(jf);
// jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//退出應用程序
//你關了窗口線程中止,可是實際項目裏,不會彈出圖片,只是生成,這個是終止線程
System.exit(0);
}
public static JPanel erstelleSpinnenDiagramm() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
String group1 = "企業信用風險指數(ECRI)";
dataset.addValue(70, group1, "商業信息(70%)");
dataset.addValue(80, group1, "財務信息(80%)");
dataset.addValue(40, group1, "付款信息(40%)");
dataset.addValue(30, group1, "公共記錄(30%)");
dataset.addValue(65, group1, "經營信息(65%)");
//SpiderWebPlot spiderwebplot1 = new SpiderWebPlot(dataset);
MySpiderWebPlot mySpiderWebPlot = new MySpiderWebPlot(dataset);
JFreeChart jfreechart = new JFreeChart("企業信用風險指數", TextTitle.DEFAULT_FONT,mySpiderWebPlot, false);
LegendTitle legendtitle = new LegendTitle(mySpiderWebPlot);
legendtitle.setPosition(RectangleEdge.BOTTOM);
jfreechart.addSubtitle(legendtitle);
ChartPanel chartpanel = new ChartPanel(jfreechart);
return chartpanel;
}
public static void savePic(JFrame jf){
//獲得窗口內容面板
Container content=jf.getContentPane();
//建立緩衝圖片對象
BufferedImage img=new BufferedImage(
jf.getWidth(),jf.getHeight(),BufferedImage.TYPE_INT_RGB);
//獲得圖形對象
Graphics2D g2d = img.createGraphics();
//將窗口內容面板輸出到圖形對象中
content.printAll(g2d);
//保存爲圖片
File f=new File("/project/111.jpg");
try {
ImageIO.write(img, "jpg", f);
} catch (IOException e) {
e.printStackTrace();
}
//釋放圖形對象
g2d.dispose();
}
}
複製代碼
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.19</version>
</dependency>
複製代碼
PhantomJS是一個基於webkit的javascript API。它使用QtWebKit做爲它核心瀏覽器的功能,使用webkit來編譯解釋執行JavaScript代碼html
echarts官網:www.echartsjs.com/java
PhantomJS:phantomjs.org/download.ht…jquery
先看一下雷達圖的demoweb
我是mac,配置一下PhantomJS環境變量先
1.執行 phantomjs echarts-convert.js -infile /project/222.json -outfile /project/echarts-chart1.png -scale 0.01 -width 600
echarts-convert.js --這是須要用到的echarts轉換的js
/project/222.json -- 從echarts官網把左邊的options複製出來新建txt,json文件均可以(本身修改options內容)
/project/echarts-chart1.png -- 生成圖表存儲的路徑
-width 600 -- 圖片寬度
複製代碼
須要jquerymin.js和echarts的js,放同級目錄就好。json
用java實現 思路就是調起cmd命令,執行,生成的圖片保存到指定路徑,後續邏輯可自行讀取圖片,大概這個意思瀏覽器
String cmd = (代碼裏須要寫完整路徑)"phantomjs " + convert.js的路徑 + " -infile " + option內容的文件路徑 + " -outfile " + 生成圖片保存的路徑;
Process process = Runtime.getRuntime().exec(cmd);
複製代碼
yum install bitmap-fonts bitmap-fonts-cjk
複製代碼