向使用Java API生成的JasperReport模板添加Highcharts图表

向使用Java API生成的JasperReport模板添加Highcharts图表,java,jasper-reports,Java,Jasper Reports,我们正在评估JasperReports的专业版。对于POC,我们需要(使用JavaAPI)根据用户在UI上选择的列动态生成报告模板,包括报告底部的总计。我们正在使用net.sf.jasperreports.*库生成报告模板,编译并运行它。那很好 但是,我们想在总数旁边添加一个图表,其中包含构成总数的每个值。我们找到了jaspersoft/highchartsjar,它似乎是要使用的,但需要一个代码片段来了解如何将图表(JRDesignchart元素)添加到报告栏(JRBand) 如有任何见解,将

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

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

如有任何见解,将不胜感激

更新
参考Jaspersoft Pro对Highcharts的支持

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

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

当然,您需要修改代码,以便用您想要显示的数据填充图表。您主要需要更改level bucket表达式和measure value表达式

要编译代码,您需要在类路径中添加一个jasperreports highcharts jar(加上依赖项-jasperreports pro、jasperreports许可证和其他)


您好@ps0604,您使用了highcharts标记,但问题似乎不是关于图表,而是关于jasper reports库。我可以建议你直接添加一个问题:我同意,这个问题与jasper reports有关,而不是highcharts。我删除了标签。如果您使用的是专业版,那么我认为联系他们的技术支持会更快、更正式。我们没有使用专业版,而是在评估。我之所以把这个问题贴在网上,是因为Jaspersoft在评估中不提供支持。谢谢,这正是我想要的
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);