0

我正在努力为我正在开发的应用程序实现图表扩展:所以我的问题是我已经编写了一些代码(样板代码)用于在 BIRT 中执行此操作。

在代码中的某个地方,我必须将数据集链接到一个系列并将该系列链接到一个 seriesdefinition 对象,该对象最终将像这样附加到图表 seriesDefinitions

  RadarSeries radarSeries = RadarSeriesImpl.create();
  radarSeries.setDataSet(numberDataValues);
  radarSeries.setSeriesIdentifier("Number data values");
  radarSeries.getLabel().setVisible(true);

其中 numberDataValues 是一个双精度数组。然后我创建我的 seriesDefinition :

  SeriesDefinition seriesDefinition = SeriesDefinitionImpl.create();
  seriesDefinition.getSeriesPalette().shift(0);

但是,到了我必须像这样将我的radarSeries链接到seriesDefinition的时候了:

  seriesDefinition.getSeriesDefinitions().add(radarSeries);

问题:尝试从代码中调用它时(在 Eclipse 中执行 Ctrl+Space),我没有getSeriesDefinitions()方法。

不用说我不能在 myChart 对象上调用getSeriesDefinitions()方法:

  myChart.getSeriesDefinitions().add(seriesDefinition);

供您参考:我已将我的 birt jar 手动包含在我的本地 maven 存储库中,这些依赖项的详细信息是:

        <dependency>
            <groupId>org.eclipse.birt</groupId>
            <artifactId>engineapi</artifactId>
            <version>${birtVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.birt</groupId>
            <artifactId>coreapi</artifactId>
            <version>${birtVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.birt</groupId>
            <artifactId>scriptapi</artifactId>
            <version>${birtVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.birt</groupId>
            <artifactId>chartengineapi</artifactId>
            <version>${birtVersion}</version>
        </dependency>

${birtVersion} = 2.6.2

这里是关于 RadarChart 的 birt 2.6.2 发布官方示例的链接:雷达图官方发布示例

有人可以帮助我吗?我真的不敢相信我在 3 天的谷歌搜索会话中没有发现如何做到这一点:这不严重!...鉴于它的受欢迎程度和力量,我认为他们应该在文档上投入更多的精力......

@Birt Guyz(如果有的话)> 很抱歉这么戏剧化的家伙,但我真的认为文​​档方面真的很糟糕......我希望能够在这方面帮助你(真的,我愿意)

这是代码:

public String drawChart() {
        // Birt Vars
    IDeviceRenderer iDeviceRenderer = null;
    IDisplayServer iDisplayServer = null;
    RunTimeContext context;
    Chart chart = null;

    // Birt Platform configuration
    PlatformConfig platformConfig = new PlatformConfig();
    platformConfig.setProperty("STANDALONE", true);

    // Creating Chart Engine
    ChartEngine chartEngine = ChartEngine.instance(platformConfig);
    IGenerator iGenerator = chartEngine.getGenerator();
    if(iGenerator == null)
        System.out.println("IGenerator NULL");
    else
        System.out.println("IGenerator NOT NULL");

    try {
        // iDeviceRenderer = chartEngine.getRenderer("dv.PNG");
        iDeviceRenderer = chartEngine.getRenderer("dv.GIF");
        iDisplayServer = iDeviceRenderer.getDisplayServer();
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Creating Chart
    ChartWithoutAxes radarChart = ChartWithoutAxesImpl.create( );
    radarChart.setDimension( ChartDimension.TWO_DIMENSIONAL_LITERAL );
    radarChart.setType(Radar.TYPE_LITERAL); //$NON-NLS-1$   
    radarChart.setSubType( "Standard Radar Chart" ); //$NON-NLS-1$

    // Plot
    radarChart.setSeriesThickness( 10 );

    // Legend
    Legend lg = radarChart.getLegend( );
    lg.getOutline( ).setVisible( true );

    // Title
    radarChart.getTitle( )
            .getLabel( )
            .getCaption( )
            .setValue( "Radar Chart" );//$NON-NLS-1$

    try {

        if(radarChart != null)
            System.out.println("RADAR CHART NOT NULL");
        else
            System.out.println("RADAR CHART NULL!!!");

        // PREPARE PHASE
        context = Generator.instance().prepare(radarChart, null, null, ULocale.getDefault());
        if(context == null)
            System.out.println("CONTEXT NULL ");
        else
            System.out.println("CONTEXT NOT NULL");

        //BIND PHASE : fetch data from DB
        NumberDataSet numberDataValues = NumberDataSetImpl.create( new double[]{
                54, 21, 75, 91, 37
        } );

        // Radar series
        RadarSeries radarSeries = RadarSeriesImpl.create();
        radarSeries.setDataSet(numberDataValues);
        radarSeries.setSeriesIdentifier("Number data values");
        radarSeries.getLabel().setVisible(true);

        SeriesDefinitionImpl seriesDefinition = (SeriesDefinitionImpl) SeriesDefinitionImpl.create();
        seriesDefinition.getSeriesPalette().shift(0);

           // ERROR HERE : can't call the method
           seriesDefinition.getSeriesDefinitions()

        // RENDERING PHASE
        if(iDisplayServer == null)
            System.out.println("DISPLAY SERVER NULL");
        else
            System.out.println("DISPLAY SERVER NOT NULL");

        GeneratedChartState generatedChartState = iGenerator.build(iDisplayServer, radarChart, null, null, context);
        iGenerator.render(iDeviceRenderer, generatedChartState);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

编辑+解决方案

抱歉耽搁了:我应该早点发布此答案以将此问题标记为已解决。只需使用 RCP 报表设计器来创建您的报表文档。将 ReportEngine/lib/*jars 复制到您的 /WEB-INF/lib;还要在 WEB-INF/ 下创建一个 platform/ 目录,并在新创建的 WEB-INF/platform/ 文件夹下复制 BIRT ReportEngine configuration/ 和 plugins/ 目录。现在有了您在 BIRT RCP 设计器工具中创建的 *.rptdesign 文件,您将不得不使用 BIRT API,它允许您与报告进行交互...

4

1 回答 1

0

抱歉耽搁了:我应该早点发布此答案以将此问题标记为已解决。

只需使用 RCP 报表设计器来创建您的报表文档。然后将 ReportEngine/lib/*jars 复制到您的 /WEB-INF/lib;还要在 WEB-INF/ 下创建一个 platform/ 目录,并在新创建的 WEB-INF/platform/ 文件夹下复制 BIRT ReportEngine configuration/ 和 plugins/ 目录。

现在有了您在 BIRT RCP 设计器工具中创建的 *.rptdesign 文件,您将不得不使用 BIRT API,它允许您与报告进行交互...

于 2013-03-20T15:40:18.457 回答