多语言展示
当前在线:158今日阅读:61今日分享:18

表格软件FineReport中如何将当前页数据入库

下面通过表格软件FineReport来简单介绍一下。
工具/原料
1

表格软件FineReport7.1.1

2

大小:148.2M 适用平台:windows/linux

方法/步骤
1

模板多张页面,如一系列的帐簿的模板。每次只打印部分页面(可能是一张,可能是多张,不一定从第一页开始),每次打印后希望触发事件,在数据库中对应位置记录本页面对应的帐簿已经打印过了。每张页面在固定位置有本张帐簿的编号,对应到数据库中有一个记录是否已经打印的记录字段,如只打印第三页时,希望在数据库中编号3457的帐簿所对应的toprint字段值改为true。如下图效果:

2

实现思路FineReport6.5中,可通过报表>报表Web属性>分页预览设置>添加打印后事件,使用JavaScript调用一个jsp的执行事件。若点击打印,就会将当前页的编号获取到,进而通过update语句修改toprint字段的值。

3

示例以已部署过FineReport的WebReport工程到tomcat服务器为例,其详细过程如下:

4

对模板添加打印后事件打开设计器,打开其tomcat报表工作目录,在菜单中点击报表>报表Web属性>分页预览设置,在右边栏中,如点击添加Flash打印后事件。在其JavaScript中,输入js代码,目的是调用其WebReport工程下写的一个jsp的执行入库操作。

5

获取所在页单元格的值如编号ID在J3单元格,即第三行、第十列,则js方法如下:var a = $('#r-2-0','div.reportPane').children().eq(9)[0].innerHTML;注释:$('#r-2-0','div.reportPane') 这个是获取模板当前页第三行,第一行为:'#r-0-0',行号从0开始;注释:eq(9)[0] 是获取第9列,第一列为eq(0)[0],列号从0开始。注:如果是扩展单元格,则要根据扩展以后所在的行与列来获取。

6

通过Ajax把值传到jsp页面完整代码如下: var a = $('#r-2-0','div.reportPane').children().eq(9)[0].innerHTML;$.ajax({url : 'http://localhost:8080/WebReport/print1.jsp?ID='+a})

7

定义jsp获取编号修改数据库表定义页面print1.jsp,首先获取编号ID的值,连接数据库通过update语句把表中toprint字段进行修改,代码如下:package com.fr.io;import java.io.File;  import java.io.FileInputStream;  import java.io.InputStream;  import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.PreparedStatement;  import com.fr.base.FRContext;  import com.fr.base.dav.Env;  public class SaveReportToDatabase {      public static void main(String[] args) {          SaveReport();      }      private static void SaveReport() {          try {              // 连接数据库              String driver = 'oracle.jdbc.driver.OracleDriver';              String url = 'jdbc:oracle:thin:@192.168.100.169:1521:orcl10g';              String user = 'temp';              String pass = 'temp123';              Class.forName(driver);              Connection conn = DriverManager.getConnection(url, user, pass);              PreparedStatement presmt = conn                      .prepareStatement('insert into report values(?,?)');              // 读进需要保存入库的模板文件              Env oldEnv = FRContext.getCurrentEnv();              String envPath = oldEnv.getPath();              File cptfile = new File(envPath                      + '\\reportlets\\gettingstarted.cpt');              int lens = (int) cptfile.length();              InputStream ins = new FileInputStream(cptfile);              // 将模板保存入库              presmt.setString(1, 'gettingstarted.cpt'); // 第一个字段存放模板相对路径              presmt.setBinaryStream(2, ins, lens); // 第二个字段存放模板文件的二进制流              presmt.execute();              conn.commit();              presmt.close();              conn.close();          } catch (Exception e) {              e.printStackTrace();          }      }  }将其print1.jsp文件放到tomcat服务器的WebReport工程下。

8

效果预览启动Web服务器,预览报表,点击Flash打印,打印完之后查看数据库的记录信息表print1,可看到当前页的编号对应的toprint字段值变成true了。

推荐信息