在报表开发平台中集成第三方图表库

1. 描述

很多人不知道该如何在报表开发平台中集成第三方图表库,由此可能会影响实际的工作效率,根据自己平时的工作经验,在该文中详细讲解一下集成第三方图表库的步骤。这里以集成echarts为例看下在FineReport中集成第三方图表库的步骤。

2. 集成需要实现两个接口ChartTypeInterfaceProvider和ChartTypeProvider集成需要的两个接口

ChartTypeInterfaceProvider是设计里用到的界面,有两个界面是必要的,一个是类型选择的界面,一个是属性配置的界面。类型选择的界面代码如下。

1. package com.fr.plugin.chart;  

2. import com.fr.chart.chartattr.Chart;  

3. import com.fr.design.mainframe.chart.gui.type.UserDefinedChartTypePane;  

4. /** 

5.  * Created by eason on 15/5/22. 

6.  */  

7. public class CustomBarTypePane extends UserDefinedChartTypePane {  

8.     //弹出框的标题  

9.     public String title4PopupWindow(){  

10.         return "自定义柱形图";  

11.     }  

12.     //该种图表类型的标识符,需要让界面和后面定义的类型关联起来  

13.     protected String getCustomChartID(){  

14.         return "自定义柱形图";  

15.     }  

16.     public void updateBean(Chart chart) {  

17.         if(chart != null){  

18.             chart.setPlot(null);  

19.         }  

20.     }  

21. }  

属性配置的界面代码如下,这里我们采用简单的实现方式,把所有的属性都写到了一个TextField里,如果想要实现别的更复杂的配置界面,可以参考echarts的文档来设计界面。

1. package com.fr.plugin.chart; /** 

2.  * Created by eason on 15/5/22. 

3.  */  

4. import com.fr.chart.chartattr.ChartCollection;  

5. import com.fr.chart.chartattr.Chart;  

6. import com.fr.design.gui.itextfield.UITextField;  

7. import com.fr.design.mainframe.chart.AbstractChartAttrPane;  

8. import com.fr.general.FRLogger;  

9. import com.fr.json.JSONException;  

10. import com.fr.json.JSONObject;  

11. import javax.swing.*;  

12. import java.awt.*;  

13. public class CustomBarAttrPane extends AbstractChartAttrPane{  

14.     private UITextField textField;  

15.     public CustomBarAttrPane(){  

16.         this.initAll();  

17.         this.initAllListeners();  

18.     }  

19.     public void populate(ChartCollection collection){  

20.         if(collection != null && collection.getSelectedChart() != null){  

21.             Chart chart = collection.getSelectedChart();  

22.             try{  

23.                 textField.setText(chart.getConfig("allOptions").toString());  

24.             }catch (JSONException ex){  

25.                 FRLogger.getLogger().error(ex.getMessage());  

26.             }  

27.         }  

28.     }  

29.     public void update(ChartCollection collection) {  

30.         if(collection != null && collection.getSelectedChart() != null){  

31.             Chart chart = collection.getSelectedChart();  

32.             try{  

33.                 chart.addConfig("allOptions"new JSONObject(textField.getText()));  

34.             }catch (JSONException ex){  

35.                 FRLogger.getLogger().error(ex.getMessage());  

36.             }  

37.         }  

38.     }  

39.     public String getIconPath() {  

40.         return "com/fr/design/images/chart/InterAttr.png";  

41.     }  

42.     protected JPanel createContentPane() {  

43.         JPanel pane = new JPanel(new BorderLayout());  

44.         textField = new UITextField();  

45.         pane.add(textField, BorderLayout.CENTER);  

46.         return pane;  

47.     }  

48.     /** 

49.      * 弹出界面的标题 

50.      * @return 弹出界面的标题 

51.      */  

52.     public String title4PopupWindow(){  

53.         return "标题";  

54.     }  

55. }  

最终我们界面的接口定义可以写成如下, isUseDefaultPane方法都return false就可以了。

1. package com.fr.plugin.chart; /** 

2.  * Created by eason on 15/5/22. 

3.  */  

4. import com.fr.design.chart.fun.impl.AbstractChartTypeInterface;  

5. import com.fr.design.gui.frpane.AttributeChangeListener;  

6. import com.fr.design.mainframe.chart.AbstractChartAttrPane;  

7. import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;  

8. public class CustomBarChartInterface extends AbstractChartTypeInterface {  

9.     public static final String XML_TAG = "ChartTypeInterfaceProvider";  

10.     public AbstractChartTypePane getPlotTypePane(){  

11.         return new CustomBarTypePane();  

12.     }  

13.     public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){  

14.         return new AbstractChartAttrPane[]{new CustomBarAttrPane()};  

15.     }  

16.     public boolean isUseDefaultPane(){  

17.         return false;  

18.     }  

19.     public String getIconPath(){  

20.         return "com/fr/plugin/chart/images/echarts.png";  

21.     }  

22. }  

3. 实现类型的接口

1. package com.fr.plugin.chart; /** 

2.  * Created by eason on 15/5/22. 

3.  */  

4. import com.fr.chart.chartattr.Chart;  

5. import com.fr.chart.fun.impl.AbstractChartTypeProvider;  

6. public class CustomBarChartType extends AbstractChartTypeProvider {  

7.     public String getChartName(){  

8.         return "echarts";  

9.     }  

10.     public String getChartUseName(){  

11.         return "echarts柱形图";  

12.     }  

13.     public Chart[] getChartTypes(){  

14.         Chart[] charts = new Chart[1];  

15.         Chart barChart = new Chart();  

16.         barChart.setWrapperName(getWrapperName());  

17.         barChart.setCustomChartID("自定义柱形图");  

18.         charts[0] = barChart;  

19.         barChart.setRequiredJs(getRequiredJS());  

20.         barChart.setChartImagePath(this.getChartImagePath());  

21.         return charts;  

22.     }  

23.     public String[] getRequiredJS(){  

24.         return new String[]{  

25.                 "/com/fr/web/core/js/echarts-all.js",  

26.                 "/com/fr/web/core/js/EchartsWrapper.js"  

27.         };  

28.     }  

29.     @Override  

30.     public String getChartImagePath() {  

31.         return "com/fr/plugin/chart/images/echarts_display.png";  

32.     }  

33.     public String getWrapperName(){  

34.         return "EchartsWrapper";  

35.     }  

36. }  

这里需要注意的是setCustomChartID方法需要和前面界面中的名字一致, setWrapperName是EchartsWrapper.js定义的function的名字。EchartsWrapper.js的内容如下:

1. /** 

2.  * Created by eason on 15/5/21. 

3.  */  

4. EchartsWrapper = function(options, dom){  

5.     var myChart = echarts.init(dom[0]);  

6.     myChart.setOption(options.jsonOptions.allOptions);  

7. }  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 帆软是一个 BI(Business Intelligence)软件,而调用第三方接口是实现数据交互的常见操作。在帆软调用第三方接口,通常需要使用 Java 程序来实现。 Java 是跨平台的编程语言,它能够实现对不同操作系统和不同软件的调用。因此,在帆软使用 Java 调用第三方接口是可行的,同时还具有灵活和扩展性等优点。 首先,需要编写 Java 程序来实现调用第三方接口的功能。编写 Java 程序需要掌握相关的编程语言和开发工具,比较常用的有 Eclipse、IntelliJ IDEA 等,同时还需要了解 Java 的相关知识,如基本语法、面向对象编程、IO 操作、网络编程等。 其次,需要将编写好的 Java 程序打包成 jar 包,然后将 jar 包导入到帆软。在帆软,选择对应的数据集,然后在数据集的“查询脚本”配置调用 Java 程序的相关参数。 最后,保存配置,测试数据集查询是否能够正常返回数据。如果测试通过,则说明成功使用 Java 调用第三方接口,可以开始进行数据交互和数据分析等操作。 总的来说,使用 Java 调用第三方接口在帆软实现数据交互是非常方便和实用的。需要掌握一些基本的编程知识和工具,同时还要了解具体的第三方接口的调用方式和参数等,通过不断实践和优化,可以实现更加高效和稳定的数据交互流程。 ### 回答2: 使用帆软调用第三方接口java,首先要确保该接口已经部署并运行在服务器上。然后,在帆软报表设计器,可以通过Java插件和定制代码的方式来实现调用第三方接口。具体步骤如下: 1. 添加Java插件 在报表设计器,点击“工具”菜单,选择“选项”,进入“选项”对话框。在左侧面板选择“扩展”,然后点击“添加”按钮,选择“Java插件”,点击“确定”按钮,即可完成Java插件的添加。 2. 编写Java代码 在报表设计器,点击“数据”菜单,选择“数据源”,进入“数据源管理器”对话框。选择“JavaBean”的数据源类型,然后在“自定义代码”文本框编写Java代码,通过调用第三方接口获取所需数据。 3. 引用JavaBean 在报表设计器,点击“工具”菜单,选择“选项”,进入“选项”对话框。在左侧面板选择“数据源”,然后点击“添加”按钮,选择“JavaBean”的数据源类型。在“JavaBean类名”文本框输入JavaBean的全限定名,然后点击“确定”按钮,即可引用JavaBean。 4. 制作报表报表设计器,添加数据集,并将数据集绑定到相应的数据源。然后在报表添加需要的图表、表格等控件,并将控件的数据绑定到数据集上。 总的来说,通过Java插件和定制代码的方式,可以方便地将帆软报表第三方接口集成起来,从而实现更为灵活和强大的报表功能。但同时也要注意,编写Java代码需要具备一定的Java开发经验和技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值