有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jasper报告将Highcharts图表添加到使用JavaAPI生成的JasperReport模板中

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

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

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

更新 关于Jaspersoft Pro支持Highchartshere的参考资料


共 (1) 个答案

  1. # 1 楼答案

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

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

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

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

    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);