电子表格FineReport7.1.1
大小:148.2M 适用平台:windows/linux
模板多张页面,如一系列的帐簿的模板。每次只打印部分页面(可能是一张,可能是多张,不一定从第一页开始),每次打印后希望触发事件,在数据库中对应位置记录本页面对应的帐簿已经打印过了。每张页面在固定位置有本张帐簿的编号,对应到数据库中有一个记录是否已经打印的记录字段,如只打印第三页时,希望在数据库中编号3457的帐簿所对应的toprint字段值改为true。如下图效果:
实现思路FineReport6.5中,可通过报表>报表Web属性>分页预览设置>添加打印后事件,使用JavaScript调用一个jsp的执行事件。若点击打印,就会将当前页的编号获取到,进而通过update语句修改toprint字段的值。
示例棍科以已部署过FineReport的WebReport工程到tomcat服务器为例,其详细过程如下:
对模板添加打印后事件打开设计器,打开其tomcat报表工作目录,在菜单中点击报表>报表Web属性>分页预览设置,在右边栏糟恩脂中,如点击添加Flash打印后事件。在其JavaScript中,输入js代码,目的是调用其WebReport工程下写的一个jsp的执行入库操作。
通过Ajax把值传到jsp页面完整代码如下: var a = $('#r-2-0','div.reportPane').children().eq(9)[0].innerHTML;$.ajax({url : 'http://localhost:8080/WebReport/print1.jsp?ID='+a})
定义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工程下。
效果预览启动Web服务器,预览报表,点击Flash打印,打印完之后查看数据库的记录信息表print1,可看到当前页的编号对应的toprint字段值变成true了。