gpt4 book ai didi

java - 将 Highcharts 图表添加到使用 Java API 生成的 JasperReport 模板中

转载 作者:行者123 更新时间:2023-11-30 05:24:48 25 4
gpt4 key购买 nike

我们正在评估 JasperReports 的专业版。对于 POC,我们需要根据用户在 UI 上选择的列(包括报告底部的总计)动态生成(使用 Java API)报告模板。我们使用 net.sf.jasperreports.* 库生成报告模板、编译并运行它。效果很好。

但是,我们希望在总计旁边添加一个图表,其中包含构成总计的每个值。我们找到了 jaspersoft/highcharts jar,它似乎是可以使用的,但需要一个代码片段来了解如何将图表(JRDesign 图表元素)添加到报告频段 (JRBand)。

任何见解都将不胜感激。

更新Jaspersoft Pro 对 Highcharts 支持的引用 here

最佳答案

通过 Java API 添加图表元素包括创建一个 JRDesignComponentElement 对象,该对象包装一个 com.jaspersoft.jasperreports.highcharts.charts.StandardChartComponent 实例,该实例包含所有图表配置。

下面是一些示例代码,用于创建一个在摘要部分包含图表的报告。该报告可以使用具有一条或多条数据记录的空数据源来运行。

您当然需要调整代码以使用您想要显示的数据填充图表。您主要需要更改级别存储桶表达式和度量值表达式。

要编译代码,您需要在类路径中添加 jasperreports-highcharts jar(以及依赖项 - jasperreports-pro、jasperreports-license 等)。

JasperDesign report = new JasperDesign();
report.setName("chart");

JRDesignBand summary = new JRDesignBand();
summary.setHeight(300);
report.setSummary(summary);

JRDesignComponentElement chartElement = new JRDesignComponentElement();
chartElement.setX(0);
chartElement.setY(0);
chartElement.setWidth(500);
chartElement.setHeight(300);
chartElement.setComponentKey(HighchartsConstants.DEFAULT_COMPONENT_KEY);

StandardChartComponent chart = new StandardChartComponent();
chart.setType(ChartType.COLUMN_CHART);

StandardChartSetting defaultSetting = new StandardChartSetting();
defaultSetting.setName(HighchartsConstants.SETTING_NAME_DEFAULT);
//set a static String property
defaultSetting.addChartProperty(new StandardChartProperty("title.text",
"My chart title", null));
//set an expression based boolean property
defaultSetting.addChartProperty(new StandardChartProperty("plotOptions.series.dataLabels.enabled",
null, new JRDesignExpression("true")));
chart.addChartSetting(defaultSetting);

DesignMultiAxisData data = new DesignMultiAxisData();
DesignMultiAxisDataset dataset = new DesignMultiAxisDataset();
//this actually means feeding data to the chart on each record
dataset.setIncrementType(IncrementTypeEnum.NONE);
data.setDataset(dataset);

DesignDataAxis rowAxis = new DesignDataAxis();
rowAxis.setAxis(Axis.ROWS);
DesignDataAxisLevel level = new DesignDataAxisLevel();
level.setName("rows");
level.setLabelExpression(new JRDesignExpression("\"Rows\""));
DesignDataLevelBucket levelBucket = new DesignDataLevelBucket();
//expression that produces category values
levelBucket.setExpression(new JRDesignExpression("\"Row \" + $V{REPORT_COUNT}"));
level.setBucket(levelBucket);
rowAxis.addLevel(level);
data.addDataAxis(rowAxis);

DesignDataMeasure measure = new DesignDataMeasure();
measure.setName("measure");
measure.setLabelExpression(new JRDesignExpression("\"Data\""));
measure.setCalculation(CalculationEnum.NOTHING);
measure.setValueClassName("java.lang.Integer");
//expression that produces series values
measure.setValueExpression(new JRDesignExpression("$V{REPORT_COUNT}"));
data.addMeasure(measure);

chart.setMultiAxisData(data);

chartElement.setComponent(chart);
summary.addElement(chartElement);

关于java - 将 Highcharts 图表添加到使用 Java API 生成的 JasperReport 模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58867865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com