1

今天我们来讲讲报表调用的事情,这个实用性很高,而且很好懂!

一、 程序网络报表概念

FineReport设计器基本可以零编码地设计出绝大多数报表,然而需求是千变万化的,也许某些个性化的功能通过设计器无法实现,此时就如上一节中介绍的,可以将模板读入程序中,进行修改后再导出,再在浏览器中访问报表。显然这样做比较繁琐,对于这种情况,您可以直接将读取的模板保存为程序网络报表,直接在Web端访问定义的程序网络报表。
下面我们做个简单的程序调用报表,实现读取Parameter.cpt,然后在浏览器中直接访问该网络报表。

二、 实现步骤

2.1 定义程序网络报表
程序网络报表所在类需要继承com.fr.web.reportlet这个抽象类,并且需要实现createReport(ReportletRequest arg0)这个方法,并返回报表对象。
具体代码如下:

//程序网络报表
package com.fr.demo;  
  
import java.util.Map;
import com.fr.base.Env;
import com.fr.base.FRContext; 
import com.fr.main.TemplateWorkBook;  
import com.fr.web.core.Reportlet;
import com.fr.web.request.ReportletRequest;
import com.fr.io.TemplateWorkBookIO;  
 
  
public class SimpleReportletDemo extends Reportlet {  
    public TemplateWorkBook createReport(ReportletRequest reportletrequest) {  
        // 新建一个WorkBook对象,用于保存最终返回的报表  
        Env oldEnv = FRContext.getCurrentEnv();  
        TemplateWorkBook WorkBook = null;  
        try {  
            // 读取模板,将模板保存为workbook对象并返回  
            WorkBook = TemplateWorkBookIO.readTemplateWorkBook(oldEnv,  
                    "\\doc\\Primary\\Parameter\\Parameter.cpt");  
        } catch (Exception e) {  
            e.getStackTrace();  
        }  
        return WorkBook;  
    }
    @Override
    public void setParameterMap(Map arg0) {
        // TODO Auto-generated method stub
        
    }
    @Override
    public void setTplPath(String arg0) {
        // TODO Auto-generated method stub
        
    }  
}    

2.2 编译生成类文件
在java开发平台中会自动编译,在此不再详述。
2.3 发布并Web预览
将编译后的SimpleReportletDemo.class放到网络报表根目录下,由于该类在包com.fr.demo中,因此存放在WEB-INF\classes\com\fr\demo下,保存后启动服务器,如内置服务器,在浏览器中输入下地址:http://localhost:8075/WebReport/ReportServer?reportlet=com.fr.demo.SimpleReportletDemo,便可以看到效果。
图片描述

三、创建程序表

我们可以了解到所谓的网络报表就是指实现了Reportlet接口的类,可以在Web浏览器端直接访问,展示出我们通过程序设计的报表。
刚才我们讲的是直接读取cpt模板文件生成的网络报表,为了更加理解网络报表的原理,现在我们介绍如何在程序中创建程序网络报表。
实例:新建一个报表,在A1单元格内插入FineReport这个字符串,对字符串进行格式设置,发布后通过浏览器来浏览,最终效果如下
图片描述

四、程序表步骤步骤

4.1 新建报表
新建CreateReportletDemo类,继承com.fr.web.Reportlet这个抽象类,并实现createReport(ReportletRequest arg0)方法,最终返回一个WorkBook。

//创建一个WorkBook工作薄,在工作薄中插入一个WorkSheet
WorkBook workbook = new WorkBook();
WorkSheet sheet1 = new WorkSheet();
workbook.addReport(sheet1);
return workbook;

4.2 插入单元格
由API概述可以知道,worksheet就是由单元格组成的,因此我们往创建的sheet1中插入单元格,编辑单元格内容,并设置单元格格式
创建一个单元格

new DefaultCellElement(int column, int row, Object value)

示例:列为0,行为0,值为FineReport,即A1单元格,并设置单元格的样式

TemplateCellElement CellA1 = new DefaultTemplateCellElement(0, 0, "FineReport");  
    Style style = Style.getInstance();

字体为Arial,粗体,字号20,红色

FRFont frfont = FRFont.getInstance("Arial", 1, 20.0F, Color.red);  
    style = style.deriveFRFont(frfont);  
    CellA1.setStyle(style);  
    sheet1.addCellElement(CellA1);

设置第0列列宽为150px,第0行行高为35px

sheet1.setColumnWidth(0, new OLDPIX(150.0F));  
    sheet1.setRowHeight(1, new OLDPIX(35.0F));        
sheet1.setColumnWidth(0, new OLDPIX(150.0F));  
    sheet1.setRowHeight(1, new OLDPIX(35.0F));

这样一张最简单的程序网络报表便形成了,完整代码如下

//创建程序报表
package com.fr.demo;  
import com.fr.base.Style;  
import com.fr.general.FRFont;  
import com.fr.main.TemplateWorkBook; 
import com.fr.main.impl.WorkBook;
import com.fr.report.cell.DefaultTemplateCellElement;  
import com.fr.report.cell.TemplateCellElement; 
import com.fr.report.worksheet.WorkSheet;
import com.fr.stable.unit.OLDPIX;
import com.fr.web.core.Reportlet;
import com.fr.web.request.ReportletRequest; 
import java.awt.Color;  
import java.util.Map;
  
public class CreateReportletDemo extends Reportlet  
{  
  public TemplateWorkBook createReport(ReportletRequest arg0)  
  {  
    //创建一个WorkBook工作薄,在工作薄中插入一个WorkSheet    
    WorkBook workbook = new WorkBook();  
    WorkSheet sheet1 = new WorkSheet();  
  
    TemplateCellElement CellA1 = new DefaultTemplateCellElement(0, 0,   
      "FineReport");  
    Style style = Style.getInstance();  
  
    FRFont frfont = FRFont.getInstance("Arial", 1, 20.0F, Color.red);  
    style = style.deriveFRFont(frfont);  
    CellA1.setStyle(style);  
    sheet1.addCellElement(CellA1);  
  
    sheet1.setColumnWidth(0, new OLDPIX(150.0F));  
    sheet1.setRowHeight(1, new OLDPIX(35.0F));  
    workbook.addReport(sheet1);  
    return workbook;  
  }
@Override
public void setParameterMap(Map arg0) {
    // TODO Auto-generated method stub
    
}
@Override
public void setTplPath(String arg0) {
    // TODO Auto-generated method stub
    
}  
}

4.3 发布并预览
编译源java文件,将生成的CreateReportletDemo.class类保存至应用WEF-INF\classes\com\fr\demo下,启动服务器,在浏览器中输入地址
http://localhost:8075/WebReport/ReportServer?reportlet=com.fr.demo.CreateReportletDemo
便可以看到我们定义的网络报表了


英雄留步
1.4k 声望18 粉丝