如何通过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
相关产品推荐
相关产品推荐

