ImageVerifierCode 换一换
格式:DOC , 页数:34 ,大小:679.50KB ,
资源ID:7607764      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7607764.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(FineReport报表二次开发(详细).doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

FineReport报表二次开发(详细).doc

1、FineReport报表二次开发 在大多数情况下FineReport都可以完全满足用户制作各种报表的需求,但是为了能够满足个别用户的个性化需求,FineReport提供了丰富二次开发接口,方便用户将FineReport和自己的项目实现无缝结合,用户在进行二次开发的工程中可以更加深入的体会到FineReport工具的强大功能。 例如:在一些特殊领域,可能需要一些特殊的函数。或者要将某个模板文件通过指定的打印机打印等等。 目录 Report的输入输出………………………………………………………… 3 单元格格式设置………………………………………………

2、……………… 7 将模板通过指定打印机打印………………………………………………… 10 自定义函数…………………………………………………………………… 12 URL 传递参数……………………………………………………………… 22 向报表中添加单元格…………………………………………………………25 读取单元格内容………………………………………………………………29 创建程序网络模版……………………………………………………………32 读取模板报表…………………………………………………………………36 Report的输入输出 FineReport提供了强

3、大的输入输出功能,所有的这些输入输出的类都在com.fr.report.io包里面。Report的输入指从报表的模板文件(XML格式的)创建Report对象,输出指将Report保存为模板文件,FineReport还支持将Report保存为PDF,Excel,Word,SVG,HTML,CSV等文件格式。 · 读取模板文件 · 保存成模板文件 · 输出成PDF文件 · 输出成Word文件 · 输出成Excel文件 · 输出成文本文件 · 可执行代码 读取模板文件 // 读取模板 File cptFile = new File(

4、"D:\\stuff.cpt"); TemplateImporter templateImporter = new TemplateImporter(); WorkBook workBook = (WorkBook)templateImporter.generate(cptFile);    Stuff.cpt是用报表设计器生成的模板文件。只需要用建立一个TemplateImporter对象, 然后调用它的generateReport()方法来产生一个Report对象,同时可以将产生的Report对象强制转换成WorkSheet或者GroupRep

5、ort。  保存成模板文件 // CPT // 清空公式计算结果 E:\\newtemplate\\stuff.cpt这个是导出后新文档生成的地址 ReportHelper.clearFormulaResult(workBook); outputStream = new FileOutputStream(new File("E:\\newtemplate\\stuff.cpt")); TemplateExporter templateExporter = new

6、 TemplateExporter(); templateExporter.export(outputStream,workBook.execute(parameterMap)) ;  通过调用TemplateExporter的exportReport(...)方法, 可以把Report对象以CPT格式保存到外部磁盘文件当中。  可执行代码 读取报表模板stuff.cpt,再分别保存为stuff.cpt,stuff.pdf和stuff.xls。 package com.fr.demo; import java.io.File; import ja

7、va.io.FileOutputStream; import com.fr.base.FRContext; import com.fr.base.dav.LocalEnv; import com.fr.report.WorkBook; import com.fr.report.core.ReportHelper; import com.fr.report.io.ExcelExporter; import com.fr.report.io.PDFExporter; import com.fr.report.io.TemplateExpo

8、rter; import com.fr.report.io.TemplateImporter; import com.fr.report.io.TextExporter; import com.fr.report.io.WordExporter; /** * 演示如何导入导出模板 * @author edgar duan * @version 6.5 */ public class ReportIO { /** * @param args */ public static void mai

9、n(String[] args) { // 报表运行环境路径, WEB-INF目录所放的位置 String envPath = "C:/FineReport6.5/WebReport/WEB-INF"; // 设置当前报表运行环境, 报表预览时需要一个运行环境 // 没有WEB-INF目录时, 路径设置为null. FRContext.setCurrentEnv(new LocalEnv(null)); FRContext.setCurrentEnv(new LocalEnv

10、envPath)); try { // 读取模板 File cptFile = new File("D:\\stuff.cpt"); TemplateImporter templateImporter = new TemplateImporter(); WorkBook workBook = (WorkBook)templateImporter.generate(cptFile); java.util.Map

11、parameterMap = new java.util.HashMap(); FileOutputStream outputStream; //生成 CPT // 清空公式计算结果 ReportHelper.clearFormulaResult(workBook); outputStream = new FileOutputStream(new File("E:\\newtemplate\\stuff.cpt")); TemplateExporte

12、r templateExporter = new TemplateExporter(); templateExporter.export(outputStream, workBook.execute(parameterMap)) ; //生成 PDF ReportHelper.clearFormulaResult(workBook); outputStream = new FileOutputStream(new File("E:\\newtemplate\\stuff

13、pdf")); PDFExporter pdfExporter = new PDFExporter(); pdfExporter.export(outputStream, workBook.execute(parameterMap)) ; // 生成DOC ReportHelper.clearFormulaResult(workBook); outputStream = new FileOutputStream(new File("E

14、\\newtemplate\\stuff.doc")); WordExporter wordExporter = new WordExporter(); wordExporter.export(outputStream,workBook.execute(parameterMap)); // 生成XLS ReportHelper.clearFormulaResult(workBook); outputStream =

15、new FileOutputStream(new File("E:\\newtemplate\\stuff.xls")); ExcelExporter excelExporter = new ExcelExporter(); excelExporter.export(outputStream,workBook.execute(parameterMap)); //生成 TXT ReportHelper.clearFormulaResult(workBook);

16、 outputStream = new FileOutputStream(new File("E:\\newtemplate\\stuff.txt")); TextExporter textExporter = new TextExporter(); textExporter.export(outputStream,workBook.execute(parameterMap)); } catch(Exception e) { e.printStackTrace();

17、 } } } 单元格格式设置 // 新建一个单元格, 位置为(2, 2), 列宽为2    // 行高为 2, 值为文本 "FineReport"    CellElement cellElement = new CellElement(2, 2, 2, 2, "FineReport");      // 得到CellElement的样式,如果没有新建默认样式    Style style = cellElement.getStyle();    if(style == null) {        style = Sty

18、le.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

19、5, 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.

20、LINE_DASH_DOT, Color.CYAN);      // 改变单元格的样式    cellElement.setStyle(style);    改变单元格的格式,应先取出该单元格(CellElement)的格式(Style)。在默认的情况下Style是null,故当取出Style后应先判断其值是否为null,如果这个值为空,则需先新建一个Style,然后再将该值赋给CellElement。最后根据Style和FRFont中的方法进一步地设置该单元格的各种属性。可执行代码如下: package com.fr.demo; import java.awt.Colo

21、r; 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.Wor

22、kBook; 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 imple

23、ments Reportlet { public CellElementStyleDemo() { } //建立新报表需要传参(ReportletRequest reportletRequest) public WorkBookTemplate createReport(ReportletRequest reportletRequest) { //new a WorkSheet WorkBook wb = new WorkBook(); WorkSh

24、eet 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);

25、 //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 = FR

26、Font.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 = st

27、yle.deriveBackground(background); // 设置水平居中 style = style.deriveHorizontalAlignment(Constants.CENTER); // 设置边框 style = style.deriveBorder(Constants.LINE_DASH_DOT, Color.red, Constants.LINE_DASH_DOT, Color.yellow, Constants.LIN

28、E_DASH_DOT, Color.BLUE, Constants.LINE_DASH_DOT, Color.CYAN); cellElement1.setStyle(style); //set the columnWidth of 4 to 200px,rowHeight of 5 to 50px workSheet.setColumnWidth(4, 200); wb.addReport(workSheet);

29、 return wb; } } 结果如下图所示: 将模板通过指定打印机打印 用户在使用FineReport进行二次开发的过程中有时候需要对不同文件通过不同的打印机打印出来,比如A打印机只能打印A.TXT; B打印机只能打印b.txt.。 得到当前报表运行环境 String envPath = "C:/FineReport6.5/WebReport/WEB-INF"; // 设置当前报表运行环境, 报表预览时需要一个运行环境 // 没有WEB-INF目录时, 路径设置为null. FRContex

30、t.setCurrentEnv(new LocalEnv(null)); FRContext.setCurrentEnv(new LocalEnv(envPath)); 读取模板文件 // 读取模板 WorkBookTemplate wbTpl = FRContext.getCurrentEnv().readTemplate("stuff.cpt");     指定打印机打印 PrintUtils.print(wbTpl.execute(null).generateReportPageSet().getTraversingCase(), false,

31、 "Smart Print"); 可执行代码 package com.fr.demo; import com.fr.base.FRContext; import com.fr.base.dav.LocalEnv; import com.fr.base.print.PrintUtils; import com.fr.report.WorkBookTemplate; /** * 演示如何将模板通过指定打印机打印 * * @author edgar duan * @version 6.5 */ public class PrintDemo

32、{ public static void main(String[] args) { // 报表运行环境路径, WEB-INF目录所放的位置 String envPath = "C:/FineReport6.5/WebReport/WEB-INF"; // 设置当前报表运行环境, 报表预览时需要一个运行环境 // 没有WEB-INF目录时, 路径设置为null. FRContext.setCurrentEnv(new LocalEnv(null)); FRContext.setCur

33、rentEnv(new LocalEnv(envPath)); try { WorkBookTemplate wbTpl = FRContext.getCurrentEnv().readTemplate("stuff.cpt"); //null 为模板需要传的参数,false为是否弹出提示窗口,Smart Print 为打印机名称 PrintUtils.print(wbTpl.execute(null).generateReportPageSet().getTraversingCase(

34、), false, "Smart Print"); } catch(Exception e) { e.printStackTrace(); } } } 自定义函数 FineReport已经提供了大量的自带函数,在正常情况下足够满足用户的报表制作需求,但是在一些特殊领域,可能需要一些特殊的函数,在这种情况下,FineReport提供了自定义函数机制,可以由用户根据业务需要自己来定义一些函数,但这些函数必须满足FineReport函数定义规则。 FineRepo

35、rt函数定义规则:Functionname(Para,Para,...),其中Functionname为函数名,Para为参数。 函数原理 在FineReport中,每一个函数都被定义成一个类,这个类必须要实现Function这个接口,在运算的时候首先通过函数名反射取得这个类,然后调用它的run(Object[] agrs)方法。下面以SUM这个函数为例。 /* * Copyright(c) 2001-2008, FineReport Inc, All Rights Reserved. */ package com.fr.report.script.function; i

36、mport com.fr.report.script.NormalFunction; import com.fr.report.script.core.FArray; import com.fr.report.script.core.FunctionHelper; /** * Function. */ public class SUM extends NormalFunction { /** * Run the function on the stack. Pops the arguments from the stack, * then re

37、turn the result. */ public Object run(Object[] args) { double result = 0; for(int i = 0; i < args.length; i++) { //p:需要先判断是否为null. if(args[i] == null) { continue; } result += parseObject(args[i]);

38、 } return FunctionHelper.parsePrimitiveDouble(result); } /* * 把Object转成double类型的值 */ private double parseObject(Object obj) { if (obj instanceof Number) { return ((Number)obj).doubleValue(); } else if (obj instanceof Boolean) {

39、 return ((Boolean)obj).booleanValue() ? 1 : 0; } else if (obj instanceof FArray) { FArray array = (FArray)obj; double sum = 0; for(int i = 0, len = array.length(); i < len; i++) { sum += parseObject(array.elementAt(i)); } return

40、sum; } else if(obj != null) { try { return Double.parseDouble(obj.toString()); } catch(NumberFormatException exp) { return 0; } } return 0; } public String getCN(){ return "SUM(number1,number2,…): 求一个指定单元格区域中

41、所有数字之和。\n" +"Number1,number2,…:1到30个参数或指定单元格区域中所有数字。\n" +"备注:\n" +" 函数将直接键入参数中的数值、逻辑值及文本表达式计算在内。\n" +" 若参数是数组或引用,则只有数组或单元格引用中的数值进行计算。\n" +"示例:\n" +"SUM(70,80)等于150。\n" +"SUM(\"70\",80,TRUE)等于151,逻辑值“TRUE”作为1来计算;“FALSE”作为0计算;文本“70”作为70来计算。"; } public String getEN(){

42、return "SUM(number1,number2,…): Adds all the numbers in a range of cells.\n" +"Number1, number2, ... are 1 to 30 arguments for which you want the total value or sum.\n" +"\n" +"Remarks:\n" +"1. Numbers, logical values, and text representations of numbers that you type directly into th

43、e list of arguments are counted. See the first and second examples following. \n" +"2. If an argument is an array or reference, only numbers in that array or reference are counted. Empty cells, logical values, text, or error values in the array or reference are ignored. See the third example foll

44、owing. \n" +"\n" +"Example:\n" +" SUM(70,80)=150.\n" +" SUM(\"70\",80,TRUE)=151, TRUE is calculated as 1, FALSE for 0, String \"70\" fo 70."; } }SUM类用来运算SUM函数,它继承了AbstractFunction这个类,而AbstractFunction实现了Function这个接口,在函数元算的时候首先根据函数名取得运算这个函数的类,比如SUM(2,4,true)这个函数首先根据函数名SUM取得SUM这个类,然

45、后调用SUM类的run(Object[] agrs)方法,agrs中存放的是SUM函数的参数,在运算的时候可以从args中取得参数进行运算。 自定义函数步骤 下面以一个自定义函数的例子来说明如何使用自定义函数,我们定义一个函数FunctionDemo,它的功能是填报数据校验的时候,某个单元格的值希望与数据库中的某个值进行比较。 实现FunctionDemo.java 编译FunctionDemo.java 注册函数FunctionDemo 使用函数FunctionDemo 实现FunctionDemo.java 代码如下: package com.fr.demo

46、 import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.logging.Level; import com.fr.base.FRContext; import com.fr.base.dav.LocalEnv; import com.fr.base.file.DatasourceManager; import com.fr.data.impl.DatabaseConnection; import com.fr.report.sc

47、ript.NormalFunction; public class FunctionDemo extends NormalFunction { /** * 此方法用于定义数据库连接 C:/FineReport6.5/WebReport/WEB-INF 是当前报表运行环境 * FRDemo 是当前的数据库连接名 * */ public static Connection getConn() { LocalEnv env = new LocalEnv("C:/FineReport6.5/WebReport/WEB-INF"); FRCont

48、ext.setCurrentEnv(env); try { DatasourceManager datasourceManager = FRContext .getDatasourceManager(); FRContext.getLogger().log(Level.WARNING, datasourceManager + ""); com.fr.data.impl.Connection dcon = datasourceManager .getConnection("FRDemo"); if (dcon instanceof D

49、atabaseConnection) { return ((DatabaseConnection) dcon).createConnection(); } } catch (Exception e) { FRContext.getLogger().log(Level.WARNING, e.getMessage(), e); } return null; } public String getManageName() { String resText = ""; String selSQL = "SELECT province FR

50、OM demo1 where number = 1"; Connection con = getConn(); try { Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(selSQL); while (rs.next()) { resText = rs.getString(1); break; } rs.close(); con.close(); } catch (Exception exp) { tr

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服