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 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 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 { } } }