You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Apache POI设置饼图数据标签的字体大小?

解决POI饼图数据标签字体大小无法修改的问题

你需要在配置数据标签(DLbls)的代码段中,添加字体大小的设置逻辑。当前代码仅开启了数值显示,未配置文本格式,具体修改如下:

找到你配置DLbls的部分,在现有设置后添加文本属性配置:

// 获取已创建的DLbls对象
CTDLbls dLbls = chart.getCTChart().getPlotArea().getPieChartArray(0).getSerArray(0).getDLbls();

// 新增:设置数据标签字体大小
if (!dLbls.isSetTextPr()) {
    dLbls.addNewTextPr();
}
CTTextBody textPr = dLbls.getTextPr();
if (!textPr.isSetBodyPr()) {
    textPr.addNewBodyPr();
}
CTParagraph paragraph = textPr.addNewP();
CTDefaultRunProperties runProperties = paragraph.addNewPPr().addNewDefRPr();
runProperties.setFontSize(12d); // 这里设置你需要的字体大小,比如12号

修改后的完整数据标签配置代码示例:

if (!chart.getCTChart().getPlotArea().getPieChartArray(0).getSerArray(0).isSetDLbls()) {
    chart.getCTChart().getPlotArea().getPieChartArray(0).getSerArray(0).addNewDLbls();
}
CTDLbls dLbls = chart.getCTChart().getPlotArea().getPieChartArray(0).getSerArray(0).getDLbls();
dLbls.addNewShowVal().setVal(true);
dLbls.addNewShowBubbleSize().setVal(true);
dLbls.addNewShowSerName().setVal(false);
dLbls.addNewShowCatName().setVal(false);
dLbls.addNewShowPercent().setVal(false);
dLbls.addNewShowLegendKey().setVal(false);

// 设置数据标签字体大小
if (!dLbls.isSetTextPr()) {
    dLbls.addNewTextPr();
}
CTTextBody textPr = dLbls.getTextPr();
if (!textPr.isSetBodyPr()) {
    textPr.addNewBodyPr();
}
CTParagraph paragraph = textPr.addNewP();
CTDefaultRunProperties runProperties = paragraph.addNewPPr().addNewDefRPr();
runProperties.setFontSize(12d);

chart.plot(data);       

原理说明

POI中饼图的数据标签样式由CTDLbls的textPr属性控制,需要手动创建文本主体、段落和默认运行属性,才能完成字体大小的配置,这和标题、图例的文本配置逻辑一致,但数据标签的配置路径不同。


内容的提问来源于stack exchange,提问作者Harikrishnan R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:00:26