Apache POI 折线图(Line Chart)Java 实现
概述
本文介绍如何使用 Apache POI 在 word 文档中生成柱状图(Line Chart),文档格式要求为 docx,对应于 Apache POI 中的 XWPFDocument。
Line Chart 成品图展示
由于 Apache POI 生成折线图的套路和柱状图的套路几乎相同,因此本篇文章就不分片段讲解,本文会直接贴出代码,并给出注释,如果觉得不好理解可以先看Apache POI 柱状图(Bar Chart)Java 实现。
Java 使用 POI XWPF API 生成折线图
package net.verytools.prac;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xwpf.usermodel.XWPFChart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.FileOutputStream;
import java.io.IOException;
public class LineChartRenderer {
public void render(XWPFDocument doc) throws IOException, InvalidFormatException {
// 创建图
XWPFChart chart = doc.createChart(14 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);
// 标题
chart.setTitleText("专业课选修人数");
chart.setTitleOverlay(false);
// 图例位置
XDDFChartLegend legend = chart.getOrAddLegend();
legend.setPosition(LegendPosition.TOP);
// X轴标题位置
XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
xAxis.setTitle("专业名称");
// y轴标题位置
XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
yAxis.setTitle("数量");
// 创建分类数据源和值数据源
XDDFCategoryDataSource categoryDS = XDDFDataSourcesFactory.fromArray(new String[]{"英语", "数学", "计算机", "财经"});
XDDFNumericalDataSource<Integer> valueDs = XDDFDataSourcesFactory.fromArray(new Integer[]{100, 200, 800, 50});
XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, xAxis, yAxis);
// 将数据源绑定到图表中,可以创建多个 serie,这样便可以有条折线
XDDFLineChartData.Series series1 = (XDDFLineChartData.Series) data.addSeries(categoryDS, valueDs);
// 折线图例标题
series1.setTitle("选修人数", null);
// 直线
series1.setSmooth(false);
// 设置标记大小
series1.setMarkerSize((short) 6);
// 设置标记样式,星星
series1.setMarkerStyle(MarkerStyle.STAR);
chart.plot(data);
// Write the output to a file
try (FileOutputStream fo = new FileOutputStream("D:\\line.docx")) {
doc.write(fo);
}
}
public static void main(String[] args) throws IOException, InvalidFormatException {
new LineChartRenderer().render(new XWPFDocument());
}
}
对照上面的图,相信看懂这个代码还是没什么压力的,最后要说明的是本文使用的 Apache POI 5.2.3 版本,不同版本所需要的依赖是不同,需要特别注意。要使用 POI 作图最重要的表示理解图例、系列、分类和数据源这些概念,这些已经在 Apache POI 柱状图(Bar Chart)Java 实现 专门讲解,因此不再赘述。
Maven 依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-full</artifactId>
<version>5.2.3</version>
</dependency>
总结
这个小系列依次讲解了如何在 Word 文章中动态生成图表:饼图、柱状图和折线图。不论是那种图绘制方式都差不太多,可谓套路满满。使用 apache poi 绘制的图表在 LibreOffice 中显示可能不正常,需要专门的处理,这点在柱状图中有过一个例子。
有问题吗?点此反馈!
温馨提示:反馈需要登录