package org.springblade.modules.pie;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import org.jfree.chart.ChartFactory;
|
import org.jfree.chart.ChartUtilities;
|
import org.jfree.chart.JFreeChart;
|
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
|
import org.jfree.chart.plot.PiePlot;
|
import org.jfree.data.general.DefaultPieDataset;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.awt.*;
|
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.util.ArrayList;
|
|
@RestController
|
public class JFreeChartUtil {
|
|
|
|
public JFreeChartUtil() {
|
}
|
|
public static void main(String[] args) {
|
DefaultPieDataset pds = new DefaultPieDataset();
|
|
pds.setValue("00点", 100);
|
pds.setValue("04点", 200);
|
pds.setValue("08点", 300);
|
String filePath = "d:/pie.jpg";
|
createPieChart(pds);
|
|
}
|
|
public static void createPieChart(DefaultPieDataset pds) {
|
|
// AnimalHeatService animalHeatService = new AnimalHeatServiceImpl();
|
//
|
// AnimalHeatVo animalHeatVo = new AnimalHeatVo();
|
// animalHeatVo.setStatus(1);
|
// animalHeatVo.setBegTime("2021-04-01 00:00:00");
|
// animalHeatVo.setEndTime("2021-04-01 00:00:00");
|
//
|
// List<ReportReturnData> heatExcels = animalHeatService.getAnimalHeatPie(animalHeatVo);
|
|
try {
|
// 分别是:显示图表的标题、需要提供对应图表的DateSet对象、是否显示图例、是否生成贴士以及是否生成URL链接
|
JFreeChart chart = ChartFactory.createPieChart("体温数据分布图", pds, false, false, true);
|
// 如果不使用Font,中文将显示不出来
|
Font font = new Font("宋体", Font.BOLD, 24);
|
// 设置图片标题的字体
|
chart.getTitle().setFont(font);
|
// 得到图块,准备设置标签的字体
|
PiePlot plot = (PiePlot) chart.getPlot();
|
// 设置标签字体
|
plot.setLabelFont(font);
|
plot.setStartAngle(new Float(3.14f / 2f));
|
// 设置plot的前景色透明度
|
plot.setForegroundAlpha(0.7f);
|
// 设置plot的背景色透明度
|
plot.setBackgroundAlpha(0.0f);
|
// 设置标签生成器(默认{0})
|
// {0}:key {1}:value {2}:百分比 {3}:sum
|
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1}占{2})"));
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
ArrayList<ImageData> list = new ArrayList<>();
|
ImageData imageData = new ImageData();
|
try {
|
// 将图表写入到ByteArrayOutputStream流中
|
ChartUtilities.writeChartAsJPEG(bos, chart, 800, 700);
|
InputStream inputStream = new ByteArrayInputStream(bos.toByteArray());
|
String fileName = "imageWrite" + System.currentTimeMillis() + ".xlsx";
|
imageData.setInputStream(inputStream);
|
list.add(imageData);
|
//写入
|
ExcelWriter excelWriter = EasyExcel.write(fileName).build();
|
|
WriteSheet writeSheet = EasyExcel.writerSheet(0, "模板0").head(ImageData.class).build();
|
excelWriter.write(list, writeSheet);
|
|
// WriteSheet writeSheet0 = EasyExcel.writerSheet(1, "模板1").head(ReportReturnData.class).build();
|
// excelWriter.write(heatExcels, writeSheet0);
|
|
excelWriter.finish();
|
|
|
//EasyExcel.write(fileName, ImageData.class).sheet().doWrite(list);
|
//EasyExcel.write(fileName, ImageData.class).sheet().doWrite(list);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
// 将内存中的图片写到本地硬盘
|
//ChartUtilities.saveChartAsJPEG(new File(filePath), chart, 600, 300);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}finally {
|
}
|
}
|
}
|