logo资料库

FineReport.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
概述
目录
1.报表调用
报表调用
读取编辑报表
1.读取报表
1.1 绝对路径读取模板
1.2  读取报表运行环境下的模板
2. 编辑报表属性
3. 导出报表
4. 查看导出结果
创建程序报表
1.新建JAVA类文件
2.编译JAVA文件
3.发布并浏览
单元格格式设置
程序报表添加单元格
1.编译JAVA文件
2.发布并浏览
遍历读取单元格内容
读取报表参数并赋值
概述 随着 FineReport 的发展,它提供的设计器和服务器应该能够满足您绝大部分的需求, 完全实现零编码的软件开发,革命性地加快软件开发速度,提高软件稳定性。但是需求是千 变万化的,而 FineReport 所包含的功能是报表行业中比较普遍的、典型的,也许某些个性 化的功能通过 FineReport 软件无法实现。因此 FineReport 开放了能够进行二次开发的接口, 来更好的满足您软件产品或项目中的个性化的需求。您可以根据该引擎 API 文档学习各类接 口的使用方法,另外若您是一名程序员,且对 FineReport 报表深感兴趣,希望更深入地了 解 FineReport 软件的内部原理,您也可以阅读该章节。 FineReport 引擎 API 文档对如何定义类、编译类文件及 JAVA 开发平台使用等 JAVA 基 础知识未作介绍,因此在您查看引擎 API 文档前请确保您有一定的 JAVA 基础。 目录 1. 报表调用 1.1 读取编辑报表 1.2 创建程序报表 1.3 单元格格式设置 1.4 程序报表添加单元格 1.5 遍历读取单元格内容 1.6 读取报表参数并赋值 注:另有报表程序数据集、自定义函数和导出 API 的相关代码,如有需要可以另行下载。 报表调用 读取编辑报表 通过内核结构的介绍,可知我们能在程序中修改报表的属性,下面我们就以一个完整的 例子说明如何在程序中读取一张报表,修改后重新导出。 1. 读取报表 读取某一路径下的模板 cpt 文件,并将其转为 WorkBook 对象,有两种读取报表的方法: 一、直接以文件绝对路径读取;二、先定义报表运行环境,然后从运行环境中直接读取 相对路径下的模板。 1.1 绝对路径读取模板 // 读取模板 File cptfile = new File("C:\\FineReport6.5\\WebReport\WEB-INF\\reportlets\\gettingstarted.cpt"); TemplateImporter tplimp = new TemplateImporter(); WorkBook workbook = tplimp.generateTemplate(cptfile); 1.2 读取报表运行环境下的模板 //定义报表运行环境,读取环境下的报表 String envPath = " C:\\FineReport6.5\\WebReport \\WEB-INF"; FRContext.setCurrentEnv(new LocalEnv(envPath));
TemplateWorkBook workbook = FRContext.getCurrentEnv().readTemplate("gettingstarted.cpt"); 2. 编辑报表属性 //获得 WorkBook 中的 WorkSheet,进而修改 A2 单元格的前景色为红色 Report report = workbook.getReport(0); //getCellElement(int column, int row),column 和 row 都从 0 开始,因此 A2 单元格便是 第 0 列第 1 行 CellElement cellA2 = report.getCellElement(0,1); FRFont frFont = FRFont.getInstance(); frFont = frFont.applyForeground(Color.red); Style style = Style.getInstance(); style = style.deriveFRFont(frFont); cellA2.setStyle(style); 3. 导出报表 // 保存模板 FileOutputStream outputStream = new FileOutputStream(new File("D:\\newGettingStarted.cpt")); TemplateExporter templateExporter = new TemplateExporter(); templateExporter.export(outputStream, workbook); 具体的执行代码如下: package com.fr.demo; import java.awt.Color; import java.io.File; import java.io.FileOutputStream; import com.fr.base.FRFont; import com.fr.base.Style; import com.fr.report.CellElement; import com.fr.report.Report; import com.fr.report.WorkBook; import com.fr.report.io.TemplateExporter; import com.fr.report.io.TemplateImporter; public class SimpleDemo { public static void main(String[] args) { try { // 读取模板 File cptfile = new File("C:\\FineReport6.5\\WebReport\\WEB-INF\\reportlets\\gettingstarted.cpt"); TemplateImporter(); tplimp.generateTemplate(cptfile); TemplateImporter tplimp = new WorkBook workbook =
A2 单元格的前景色为红色 //获得 WorkBook 中的 WorkSheet,进而修改 Report report = workbook.getReport(0); //getCellElement(int column, int row),column 和 row 都从 0 开始,因此 A2 单元格便是第 0 列第 1 行 CellElement cellA2 = report.getCellElement(0,1); frFont.applyForeground(Color.red); FRFont frFont = FRFont.getInstance(); frFont = Style style = Style.getInstance(); style = style.deriveFRFont(frFont); cellA2.setStyle(style); // 保存模板 FileOutputStream outputStream = new FileOutputStream(new File("D:\\newGettingStarted.cpt")); TemplateExporter templateExporter = new templateExporter.export(outputStream, } catch (Exception e) { e.printStackTrace(); } TemplateExporter(); workbook); } } 4. 查看导出结果 编译运行上述代码,将会在 D 盘根目录下输出报表 newGettingStarted.cpt,我们用设计器 打开导出模板,可以看到,A2 单元格的前景色变成了红色。
创建程序报表 由服务器原理章节,我们可以了解到所谓的网络报表就是指实现了 Reportlet 接口的文件, 程序网络报表的存在可以用来解决某些特殊应用,而由于程序网络报表需要自己来实现 Reportlet 接口,接下来我们给以详细说明。 建议在开始本章节钱稍微了解一下 FineReport 提供的 API 学习,当然需要一定的程序语言 基础。 FineReport 报表设计器可以设计出绝大多数的报表而不用写一行代码,只有少部分的报表 由于有特殊需求需要用写程序的方式来设计,FineReport 提供了丰富的 API 接口可以让用户很 轻松的做出需要的报表,下面这个例子就是要新建一个报表,在(1,1)单元格内插入 FineReport 这个字符串,对字符串进行格式设置,在其中(4,5)单元格内插入一个 FineReport 的 log 标 志,用 J2EE 服务器来发布,通过浏览器来浏览,下面以这个简单的例子来详细的介绍如何创建 程序网络报表。 1.新建 JAVA 类文件 创建程序网络报表需要新建一个 JAVA 类,我们把这个类命名成 SimpleReportletDemo,这个类 需要实现 com.fr.web.Reportlet 这个接口,并且需要实现 public Report createReport(ReportletRequest reportletRequest)这个方法。 ► 实现 com.fr.web.Reportlet 接口,格式如下: public class SimpleReportletDemo implements Reportlet { public SimpleReportletDemo() { } public WorkBookTemplate createReport(ReportletRequest reportletRequest) { } ► 实现 public Report createReport(ReportletRequest reportletRequest)方法, 这个方法需要返回一个 Report 类型的对象,代码格式如下: public Report createReport(ReportletRequest reportletRequest){ WorkBook wb=new WorkBook(); WorkBook wb=new WorkBook(); WorkSheet workSheet=new WorkSheet(); return wb; } 下面我们可以给 workSheet 加上一些需要的单元格内容。 ♦ 我们现在可以给这个 workSheet 的(1,1)格子内加上一个字符串,如下所示: //new a cellElement with String "FineReport" CellElement cellElement1 = new DefaultCellElement(1, 1, "FineReport"); //add the cellElement to the workSheet workSheet.addCellElement(cellElement1); ♦ 然后可以给这个 workSheet 调整列宽和行高,如下所示: //set the columnWidth of 1 to 200px,rowHeight of 1 to 30px workSheet.setColumnWidth(1, 200); workSheet.setRowHeight(1, 30);
♦ 给这个单元格设置字体,样式,颜色还有前景色等等。 //set the font of cellElement1 Style style = Style.getInstance(); FRFont frFont = FRFont.getInstance("Tahoma", Font.BOLD | Font.ITALIC, 20); frFont = frFont.applyForeground(Color.red); style = style.deriveFRFont(frFont); cellElement1.setStyle(style); 完整代码如下所示: package com.fr.demo; import java.awt.Color; import java.awt.Font; import com.fr.base.FRFont; import com.fr.base.Style; import com.fr.report.CellElement; import com.fr.report.DefaultCellElement; import com.fr.report.WorkBook; import com.fr.report.WorkBookTemplate; import com.fr.report.WorkSheet; import com.fr.web.Reportlet; import com.fr.web.ReportletRequest; /** * ReportletFromTemplateDemo. * @author marks */ public class SimpleReportletDemo implements Reportlet { public SimpleReportletDemo() { } //建立新报表需要传参(ReportletRequest reportletRequest) public WorkBookTemplate createReport(ReportletRequest reportletRequest) { //new a WorkSheet WorkBook wb = new WorkBook(); WorkSheet workSheet = new WorkSheet(); //new a cellElement with String "FineReport" CellElement cellElement1 = new DefaultCellElement(1, 1, "FineReport"); //add the cellElement to the workSheet workSheet.addCellElement(cellElement1); //set the columnWidth of 1 to 200px,rowHeight of 1 to 30px workSheet.setColumnWidth(1, 200); workSheet.setRowHeight(1, 30);
//set the font of cellElement1 Style style = Style.getInstance(); FRFont frFont = FRFont.getInstance("Tahoma", Font.BOLD,Font.ITALIC, 20); frFont = frFont.applyForeground(Color.red); style = style.deriveFRFont(frFont); cellElement1.setStyle(style); //set the columnWidth of 4 to 200px,rowHeight of 5 to 50px workSheet.setColumnWidth(4, 200); wb.addReport(workSheet); return wb; } } 2.编译 JAVA 文件 下面命令用于编译 JAVA 文件: 注意在编译时将 fr-server-6.5.jar 放置在当前目录 C:\>javac -classpath fr-server-6.5.jar SimpleReportletDemo.java 将编译后的 SimpleReportletDemo.class 放到网络报表根目录下,存放地址如下: WEB-INF\classes\com\fr\demo 3.发布并浏览 首先启动报表服务器,既 FineReport 安装目录下面的 Jetty 服务器,Jetty 服务器启动完毕后 打开浏览器,在浏览器中输入下列地址: http://localhost:8079/WebReport/ReportServer?reportlet=com.fr.demo.SimpleReportletD emo 结果如下所示: 单元格格式设置 // 新建一个单元格, 位置为(2, 2), 列宽为 2 // 行高为 2, 值为文本 "FineReport" CellElement cellElement = new CellElement(2, 2, 2, 2, "FineReport"); // 得到 CellElement 的样式,如果没有新建默认样式 Style style = cellElement.getStyle();
if(style == null) { style = Style.getInstance(); } // 设置字体和前景的颜色 FRFont frFont = FRFont.getInstance("Dialog", Font.BOLD, 14); frFont = frFont.applyForeground(new Color(21, 76, 160)); style = style.deriveFRFont(frFont); // 设置背景 ColorBackground background = ColorBackground.getInstance(new Color(255, 25 5, 177)); style = style.deriveBackground(background); // 设置水平居中 style = style.deriveHorizontalAlignment(Constants.CENTER); // 设置边框 style = style.deriveBorder(Constants.LINE_DASH_DOT, Color.red, Constants.LI NE_DASH_DOT, Color.yellow, Constants.LINE_DASH_DOT, Color.BLUE, Constants.L INE_DASH_DOT, Color.CYAN); // 改变单元格的样式 cellElement.setStyle(style); 改变单元格的格式,应先取出该单元格(CellElement)的格式(Style)。在默认的情况下 Style 是 null,故当取出 Style 后应先判断其值是否为 null,如果这个值为空,则需先新建一个 Style,然后再将该值赋给 CellElement。最后根据 Style 和 FRFont 中的方法进一步地设置 该单元格的各种属性。 可执行代码如下: package com.fr.demo; import java.awt.Color; import java.awt.Font; import com.fr.base.Constants; import com.fr.base.FRFont; import com.fr.base.Style; import com.fr.base.background.ColorBackground; import com.fr.report.CellElement; import com.fr.report.DefaultCellElement; import com.fr.report.WorkBook; import com.fr.report.WorkBookTemplate; import com.fr.report.WorkSheet; import com.fr.web.Reportlet; import com.fr.web.ReportletRequest; /**
* ReportletFromTemplateDemo. * @author marks * 设置单元格格式 */ public class CellElementStyleDemo implements Reportlet { public CellElementStyleDemo() { } //建立新报表需要传参(ReportletRequest reportletRequest) public WorkBookTemplate createReport(ReportletRequest reportletRequest) { //new a WorkSheet WorkBook wb = new WorkBook(); WorkSheet workSheet = new WorkSheet(); "FineReport"); //new a cellElement with String "FineReport" CellElement cellElement1 = new DefaultCellElement(1, 1, //add the cellElement to the workSheet workSheet.addCellElement(cellElement1); //set the columnWidth of 1 to 200px,rowHeight of 1 to 30px workSheet.setColumnWidth(1, 200); workSheet.setRowHeight(1, 30); //set the font of cellElement1 Style style = Style.getInstance(); FRFont frFont = FRFont.getInstance("Tahoma", Font.BOLD | Font.ITALIC, 20); frFont = frFont.applyForeground(Color.red); style = style.deriveFRFont(frFont); // 设置背景 ColorBackground background = ColorBackground.getInstance(new Color(255, 255, 177)); style = style.deriveBackground(background); // 设置水平居中 style = style.deriveHorizontalAlignment(Constants.CENTER); // 设置边框 style = style.deriveBorder(Constants.LINE_DASH_DOT, Color.red, Constants.LINE_DASH_DOT, Color.yellow, Constants.LINE_DASH_DOT, Color.BLUE, Constants.LINE_DASH_DOT, Color.CYAN);
分享到:
收藏