粗略记录
1.生成图片插入word中
List titles = generalDetail.getTitles();//横坐标
List datas = generalDetail.getDatas();//纵坐标
List<String> titleList = titles;
List<Integer> longData = datas;
// 创建柱状图图表
JFreeChart chart = createBarChartData(commentMap.get(columnId), titleList, longData);
// 保存图表为临时文件
File chartFile = new File("chart.png");
JFreeChart pieChart = createPieChartData(commentMap.get(columnId), titleList, longData);
// 保存图表为临时文件
File pieChartFile = new File("pieChart.png");
try {
ChartUtilities.saveChartAsPNG(chartFile, chart, 800, 600);
// 插入图表到Word文档
XWPFParagraph chartParagraph = document.createParagraph();
XWPFRun chartRun = chartParagraph.createRun();
chartRun.addPicture(new FileInputStream(chartFile), XWPFDocument.PICTURE_TYPE_PNG, "chart", Units.toEMU(400), Units.toEMU(300));
ChartUtilities.saveChartAsPNG(pieChartFile, pieChart, 800, 600);
// 插入饼状图到Word文档
XWPFParagraph pieChartParagraph = document.createParagraph();
XWPFRun pieChartRun = pieChartParagraph.createRun();
pieChartRun.addPicture(new FileInputStream(pieChartFile), XWPFDocument.PICTURE_TYPE_PNG, "pie_chart", Units.toEMU(400), Units.toEMU(300));
// 删除临时文件
chartFile.delete();
pieChartFile.delete();
} catch (IOException e) {
e.printStackTrace();
}
}
2.对应方法
private JFreeChart createBarChartData(String name, List<String> titles, List<Integer> datas) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < titles.size(); i++) {
dataset.addValue(datas.get(i), "Data", titles.get(i));
}
JFreeChart chart = ChartFactory.createBarChart(
name + "数据统计",
"",
"",
dataset
);
// 设置标题字体
chart.getTitle().setFont(new java.awt.Font("宋体", java.awt.Font.BOLD, 18));
CategoryPlot plot = chart.getCategoryPlot();
// 设置 X 轴标题字体
CategoryAxis domainAxis = plot.getDomainAxis();
Font domainFont = new Font("SimSun", Font.BOLD, 14); // 使用宋体(SimSun)字体,加粗,大小为14
domainAxis.setTickLabelFont(domainFont);
// 设置 Y 轴标题字体
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
Font rangeFont = new Font("SimSun", Font.BOLD, 14); // 使用宋体(SimSun)字体,加粗,大小为14
rangeAxis.setTickLabelFont(rangeFont);
return chart;
}
/**
* 饼状图图表
*
* @param s
* @param titleList
* @param longData
* @return
*/
private JFreeChart createPieChartData(String s, List<String> titleList, List<Integer> longData) {
// 创建饼状图
DefaultPieDataset dataset = new DefaultPieDataset();
for (int i = 0; i < titleList.size(); i++) {
dataset.setValue(titleList.get(i), longData.get(i));
}
JFreeChart pieChart = ChartFactory.createPieChart(
s + "数据统计",
dataset,
true,
true,
false
);
// 设置标题字体
pieChart.getTitle().setFont(new java.awt.Font("宋体", java.awt.Font.BOLD, 18));
// 设置标签字体
PiePlot plot = (PiePlot) pieChart.getPlot();
Font labelFont = new Font("SimSun", Font.PLAIN, 12); // 使用宋体(SimSun)字体,普通样式,大小为12
plot.setLabelFont(labelFont);
return pieChart;
}
2.插入到pdf中
for (Object preProcessParam : analysisResult.getPreProcessParams()) {
PreProcessParams params = (PreProcessParams) preProcessParam;
List<Integer> columnIds = params.getColumnIds();
for (Integer columnId : columnIds) {
params.setColumnId(columnId);
ChartsData generalDetail = measurePreProcessService.getGeneralDetail(params);
List titles = generalDetail.getTitles();//横坐标
List datas = generalDetail.getDatas();//纵坐标
List<String> titleList = titles;
List<Integer> longData = datas;
// 创建柱状图图表
DefaultCategoryDataset dataset = createDataset(titleList, longData);
JFreeChart barChart = createBarChartPDF(commentMap.get(columnId) + "数据统计", "", "", dataset);
barChart.getTitle().setFont(new java.awt.Font("宋体", java.awt.Font.BOLD, 18));
ByteArrayOutputStream chartOutputStream = new ByteArrayOutputStream();
ChartUtilities.writeChartAsPNG(chartOutputStream, barChart, 800, 600);
com.itextpdf.layout.element.Image chartImage = new com.itextpdf.layout.element.Image(ImageDataFactory.create(chartOutputStream.toByteArray()));
document.add(chartImage);
// 创建饼状图数据集
DefaultPieDataset datasetPie = createPieDataset(titleList, longData);
JFreeChart pieChart = createPieChartPDF(commentMap.get(columnId) + "数据统计", datasetPie);
pieChart.getTitle().setFont(new java.awt.Font("宋体", java.awt.Font.BOLD, 18));
CategoryPlot plot = barChart.getCategoryPlot();
// 设置 X 轴标题字体
CategoryAxis domainAxis = plot.getDomainAxis();
Font domainFont = new Font("SimSun", Font.BOLD, 14); // 使用宋体(SimSun)字体,加粗,大小为14
domainAxis.setTickLabelFont(domainFont);
// 设置 Y 轴标题字体
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
Font rangeFont = new Font("SimSun", Font.BOLD, 14); // 使用宋体(SimSun)字体,加粗,大小为14
rangeAxis.setTickLabelFont(rangeFont);
// 设置标签字体
PiePlot plot1 = (PiePlot) pieChart.getPlot();
Font labelFont = new Font("SimSun", Font.PLAIN, 12); // 使用宋体(SimSun)字体,普通样式,大小为12
plot1.setLabelFont(labelFont);
ByteArrayOutputStream chartOutputStream1 = new ByteArrayOutputStream();
ChartUtilities.writeChartAsPNG(chartOutputStream1, pieChart, 800, 600);
com.itextpdf.layout.element.Image chartImage1 = new com.itextpdf.layout.element.Image(ImageDataFactory.create(chartOutputStream1.toByteArray()));
document.add(chartImage1);
}
2.1具体方法
private DefaultCategoryDataset createDataset(List<String> titleList, List<Integer> longData) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < titleList.size(); i++) {
dataset.addValue(longData.get(i), "Series 1", titleList.get(i));
}
return dataset;
}
private JFreeChart createBarChartPDF(String barChartTitle, String categoryAxisLabel, String valueAxisLabel, DefaultCategoryDataset dataset) {
return ChartFactory.createBarChart(
barChartTitle,
categoryAxisLabel,
valueAxisLabel,
dataset
);
}