FineReport报表二次开发详细Word格式文档下载.docx

上传人:b****5 文档编号:19411594 上传时间:2023-01-06 格式:DOCX 页数:34 大小:386.20KB
下载 相关 举报
FineReport报表二次开发详细Word格式文档下载.docx_第1页
第1页 / 共34页
FineReport报表二次开发详细Word格式文档下载.docx_第2页
第2页 / 共34页
FineReport报表二次开发详细Word格式文档下载.docx_第3页
第3页 / 共34页
FineReport报表二次开发详细Word格式文档下载.docx_第4页
第4页 / 共34页
FineReport报表二次开发详细Word格式文档下载.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

FineReport报表二次开发详细Word格式文档下载.docx

《FineReport报表二次开发详细Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《FineReport报表二次开发详细Word格式文档下载.docx(34页珍藏版)》请在冰豆网上搜索。

FineReport报表二次开发详细Word格式文档下载.docx

//读取模板

FilecptFile=newFile("

D:

\\stuff.cpt"

);

TemplateImportertemplateImporter=newTemplateImporter();

WorkBookworkBook=(WorkBook)templateImporter.generate(cptFile);

 

Stuff.cpt是用报表设计器生成的模板文件。

只需要用建立一个TemplateImporter对象,然后调用它的generateReport()方法来产生一个Report对象,同时可以将产生的Report对象强制转换成WorkSheet或者GroupReport。

保存成模板文件

//CPT

//清空公式计算结果

E:

\\newtemplate\\stuff.cpt这个是导出后新文档生成的地址

ReportHelper.clearFormulaResult(workBook);

outputStream=newFileOutputStream(newFile("

E:

\\newtemplate\\stuff.cpt"

));

TemplateExportertemplateExporter=newTemplateExporter();

templateExporter.export(outputStream,workBook.execute(parameterMap));

通过调用TemplateExporter的exportReport(...)方法,可以把Report对象以CPT格式保存到外部磁盘文件当中。

可执行代码

读取报表模板stuff.cpt,再分别保存为stuff.cpt,stuff.pdf和stuff.xls。

packagecom.fr.demo;

importjava.io.File;

importjava.io.FileOutputStream;

importcom.fr.base.FRContext;

importcom.fr.base.dav.LocalEnv;

importcom.fr.report.WorkBook;

importcom.fr.report.core.ReportHelper;

importcom.fr.report.io.ExcelExporter;

importcom.fr.report.io.PDFExporter;

importcom.fr.report.io.TemplateExporter;

importcom.fr.report.io.TemplateImporter;

importcom.fr.report.io.TextExporter;

importcom.fr.report.io.WordExporter;

/**

*演示如何导入导出模板

*@authoredgarduan

*@version6.5

*/

publicclassReportIO{

*@paramargs

publicstaticvoidmain(String[]args){

//报表运行环境路径,WEB-INF目录所放的位置

StringenvPath="

C:

/FineReport6.5/WebReport/WEB-INF"

;

//设置当前报表运行环境,报表预览时需要一个运行环境

//没有WEB-INF目录时,路径设置为null.FRContext.setCurrentEnv(newLocalEnv(null));

FRContext.setCurrentEnv(newLocalEnv(envPath));

try{

java.util.MapparameterMap=newjava.util.HashMap();

FileOutputStreamoutputStream;

//生成CPT

ReportHelper.clearFormulaResult(workBook);

outputStream=newFileOutputStream(newFile("

templateExporter.export(outputStream,workBook.execute(parameterMap));

//生成PDF

\\newtemplate\\stuff.pdf"

PDFExporterpdfExporter=newPDFExporter();

pdfExporter.export(outputStream,workBook.execute(parameterMap));

//生成DOC

\\newtemplate\\stuff.doc"

WordExporterwordExporter=newWordExporter();

wordExporter.export(outputStream,workBook.execute(parameterMap));

//生成XLS

\\newtemplate\\stuff.xls"

ExcelExporterexcelExporter=newExcelExporter();

excelExporter.export(outputStream,workBook.execute(parameterMap));

//生成TXT

\\newtemplate\\stuff.txt"

TextExportertextExporter=newTextExporter();

textExporter.export(outputStream,workBook.execute(parameterMap));

}catch(Exceptione){

e.printStackTrace();

}

}

单元格格式设置

// 

新建一个单元格, 

位置为(2, 

2), 

列宽为2 

行高为 

2, 

值为文本 

"

FineReport"

CellElement 

cellElement 

new 

CellElement(2, 

得到CellElement的样式,如果没有新建默认样式 

Style 

style 

cellElement.getStyle();

if(style 

== 

null) 

Style.getInstance();

设置字体和前景的颜色 

FRFont 

frFont 

FRFont.getInstance("

Dialog"

 

Font.BOLD, 

14);

frFont.applyForeground(new 

Color(21, 

76, 

160));

style.deriveFRFont(frFont);

设置背景 

ColorBackground 

background 

ColorBackground.getInstance(new 

Color(255, 

255, 

177));

style.deriveBackground(background);

设置水平居中 

style.deriveHorizontalAlignment(Constants.CENTER);

设置边框 

style.deriveBorder(Constants.LINE_DASH_DOT, 

Color.red, 

Constants.LINE_DASH_DOT, 

Color.yellow, 

Color.BLUE, 

Color.CYAN);

改变单元格的样式 

cellElement.setStyle(style);

改变单元格的格式,应先取出该单元格(CellElement)的格式(Style)。

在默认的情况下Style是null,故当取出Style后应先判断其值是否为null,如果这个值为空,则需先新建一个Style,然后再将该值赋给CellElement。

最后根据Style和FRFont中的方法进一步地设置该单元格的各种属性。

可执行代码如下:

importjava.awt.Color;

importjava.awt.Font;

importcom.fr.base.Constants;

importcom.fr.base.FRFont;

importcom.fr.base.Style;

importcom.fr.base.background.ColorBackground;

importcom.fr.report.CellElement;

importcom.fr.report.DefaultCellElement;

importcom.fr.report.WorkBookTemplate;

importcom.fr.report.WorkSheet;

importcom.fr.web.Reportlet;

importcom.fr.web.ReportletRequest;

*ReportletFromTemplateDemo.

*@authormarks

*设置单元格格式

publicclassCellElementStyleDemoimplementsReportlet{

publicCellElementStyleDemo(){

//建立新报表需要传参(ReportletRequestreportletRequest)

publicWorkBookTemplatecreateReport(ReportletRequestreportletRequest){

//newaWorkSheet

WorkBookwb=newWorkBook();

WorkSheetworkSheet=newWorkSheet();

//newacellElementwithString"

CellElementcellElement1=newDefaultCellElement(1,1,"

//addthecellElementtotheworkSheet

workSheet.addCellElement(cellElement1);

//setthecolumnWidthof1to200px,rowHeightof1to30px

workSheet.setColumnWidth(1,200);

workSheet.setRowHeight(1,30);

//setthefontofcellElement1

Stylestyle=Style.getInstance();

FRFontfrFont=FRFont.getInstance("

Tahoma"

Font.BOLD|Font.ITALIC,20);

frFont=frFont.applyForeground(Color.red);

style=style.deriveFRFont(frFont);

//设置背景

ColorBackgroundbackground=ColorBackground.getInstance(newColor(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);

cellElement1.setStyle(style);

//setthecolumnWidthof4to200px,rowHeightof5to50px

workSheet.setColumnWidth(4,200);

wb.addReport(workSheet);

returnwb;

}

结果如下图所示:

将模板通过指定打印机打印

用户在使用FineReport进行二次开发的过程中有时候需要对不同文件通过不同的打印机打印出来,比如A打印机只能打印A.TXT;

B打印机只能打印b.txt.。

得到当前报表运行环境

//设置当前报表运行环境,报表预览时需要一个运行环境

WorkBookTemplatewbTpl=FRContext.getCurrentEnv().readTemplate("

stuff.cpt"

指定打印机打印

PrintUtils.print(wbTpl.execute(null).generateReportPageSet().getTraversingCase(),false,"

SmartPrint"

importcom.fr.base.print.PrintUtils;

/**

*演示如何将模板通过指定打印机打印

*

*@authoredgarduan

*@version6.5

*/

publicclassPrintDemo{

publicstaticvoidmain(String[]args){

//报表运行环境路径,WEB-INF目录所放的位置

WorkBookTemplatewbTpl=FRContext.getCurrentEnv().readTemplate("

//null为模板需要传的参数,false为是否弹出提示窗口,SmartPrint为打印机名称PrintUtils.print(wbTpl.execute(null).generateReportPageSet().getTraversingCase(),false,"

}

自定义函数

FineReport已经提供了大量的自带函数,在正常情况下足够满足用户的报表制作需求,但是在一些特殊领域,可能需要一些特殊的函数,在这种情况下,FineReport提供了自定义函数机制,可以由用户根据业务需要自己来定义一些函数,但这些函数必须满足FineReport函数定义规则。

FineReport函数定义规则:

Functionname(Para,Para,...),其中Functionname为函数名,Para为参数。

函数原理

在FineReport中,每一个函数都被定义成一个类,这个类必须要实现Function这个接口,在运算的时候首先通过函数名反射取得这个类,然后调用它的run(Object[]agrs)方法。

下面以SUM这个函数为例。

/*

*Copyright(c)2001-2008,FineReportInc,AllRightsReserved.

packagecom.fr.report.script.function;

importcom.fr.report.script.NormalFunction;

importcom.fr.report.script.core.FArray;

importcom.fr.report.script.core.FunctionHelper;

*Function.

publicclassSUMextendsNormalFunction{

/**

*Runthefunctiononthestack.Popstheargumentsfromthestack,

*thenreturntheresult.

publicObjectrun(Object[]args){

doubleresult=0;

for(inti=0;

i<

args.length;

i++){

//p:

需要先判断是否为null.

if(args[i]==null){

continue;

result+=parseObject(args[i]);

returnFunctionHelper.parsePrimitiveDouble(result);

/*

*把Object转成double类型的值

privatedoubleparseObject(Objectobj){

if(objinstanceofNumber){

return((Number)obj).doubleValue();

}elseif(objinstanceofBool

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1