润乾自带的打印直接可以通过触发js事件来进行调用。onClick="report1_print();return false;"

如果客户需要记录某个用户在某个时间段进行打印的次数以及规定该用户在某个时间段打印的权限,并且日后要根据这些记录进行统计,该怎么做到呢?下面提供了一套方案可以解决该问题,此方案也可以灵活的针对客户的这类需求。

具体需求:例如规定某个用户只能在8点到9点之间进行打印,其余时间需要授权后才能进行打印,后台需要记录该用户的打印时间、是否为超时打印等信息用来统计。

解决思路:

1, 
判断一个时间段是否能掉打印这个比较简单,可以在单元格中加入if语句判断时间,是否显示触发打印的js,也可以先调用一段判断的js满足条件后再调用润乾的打印js。

2, 
记录打印的相关信息,通过点击打印的js后先通过ajax与servlet交互进行数据的插入,然后再调用润乾的打印js。

下文采用js的方式来实现判断功能,通过ajax进行数据的插入。

随意准备一张报表作为打印的例子。

首先,先来时间判断的功能,在展现报表的页面(showReport.jsp)中接受外界的两个参数,username(用户姓名)和type(超时后授权,值为2时为超时后授权打印),然后加入js代码:

function printtime() {

//首先对日期类型数据进行格式转化,从网上找的日期格式化代码begin

Date.prototype.format = function(format) {

/*

* eg:format="YYYY-MM-dd hh:mm:ss";

*/

var o = {

"M+" :
this.getMonth() + 1,
// month

"d+" :
this.getDate(),
// day

"h+" :
this.getHours(),
// hour

"m+" :
this.getMinutes(),
// minute

"s+" :
this.getSeconds(),
// second

"q+" : Math.floor((this.getMonth()
+ 3) / 3), // quarter

"S" :
this.getMilliseconds()

}

if (/(y+)/.test(format)) {

format = format.replace(RegExp.$1, (this.getFullYear() +
"")

.substr(4 - RegExp.$1.length));

}

for (
var k
in o) {

if (new
RegExp("(" + k +
")").test(format)) {

format = format.replace(RegExp.$1,

RegExp.$1.length == 1 ? o[k] : ("00" + o[k])

.substr(("" + o[k]).length));

}

}

return format;

}

//日期格式化代码end

//模拟起始时间和结束时间

var begintime='08:00:00';

var endtime='09:00:00';

var now =
new Date().format("hh:mm:ss");//取当前系统时间并转换成相应格式

//判断当前时间是否在规定的时间内或者是否给予了授权

if((begintime<now&&endtime>now)||<%=type%>=="2")

{

run();

}else{

alert("已经超时,请联系管理员");

}

}

这样就可以进行判断是否满足规定,如果满足调用润乾的打印功能report1_print();

接下来创建一个servlet做后台处理工作.主要是把前台传入过来的打印的相关信息插入数据库中.

临时测试数据库表结构:

String userName = request.getParameter("username");

String type = request.getParameter("type");

if (type ==
null)

type = "1";//

String printTime = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss")

.format(new Date());

String sql = "insert 
into print values('" + userName +
"','"

+ printTime + "','" + type +
"')";

Connect con = new Connect();

con.executeInsert(sql);

然后构建ajax框架,url为上文中的的servlet,传入参数为之前页面中接受的两个参数username和type.

//核心对象变量

var xmlHttp;

//区分浏览器创建XMLHttpRequest核心对象

function create() {

if (window.XMLHttpRequset) {

xmlHttp = new XMLHttpRequest();

} else
if (window.ActiveXObject) {

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

}

}

//ajax核心执行方法(此处为提交到servlet处理)

function run() {

create();

var URL = "../servlet/PrintTime?username=<%=username%>&type=<%=type%>";

xmlHttp.open("POST", URL,
true);

xmlHttp.onreadystatechange = callback;

xmlHttp.send(null);

report1_print();

}

//回调函数

function callback() {

if (xmlHttp.readyState == 4) {

if (xmlHttp.status == 200) {

var v = xmlHttp.responseText;

}

}

}

最后在toolbar.jsp中修改调用打印的js事件
onClick="printtime();return false;",这里我们先要进行判断,所以直接调用判断的js,通过后会自行调用ajax记录打印以及打印报表的相关方法。

测试结果:

1,在8点到9点之间,用户名为zhangsan的用户允许打印报表,并且在数据库中记录:

2,在9点以后,用户名为zhangsan的用户打印报表时提示超时。

3,  模拟管理员给张三授权允许他在超时情况下打印,报表中type参数模拟成2,此时再超时情况下允许打印报表,并且在数据库中记录:

当然这里的权限是模拟出来的,具体实际应用中会根据不同的需求,数据机构、权限控制、判断条件都会有所变动,但是思路相同,这样就可以通过ajax来实践记录打印的功能。

附件中也相关的jsp、java、此例中的数据库建表语句。

通过ajax记录打印信息的更多相关文章

  1. 向linux内核增加一个系统调用-2(利用proc打印信息)

    添加系统调用,打印/proc中的系统信息 前面关于proc和内核态函数的东西可以对比代码来看. 参考 http://blog.csdn.net/kylin_fire_zeng/article/deta ...

  2. day111:MoFang:邀请好友流程&生成邀请好友二维码&第三方应用识别二维码&本地编译测试&记录邀请人信息

    目录 1.邀请业务逻辑流程图 2.邀请好友-前端 3.邀请好友-后端接口(生成二维码) 4.前端获取后端生成的二维码 5.前端长按页面,保存图片到相册 6.客户端通过第三方识别微信二维码,服务端提供对 ...

  3. Xcode8如何去除控制台多余的打印信息

    Xcode8如何去除控制台多余的打印信息 最近刚使用了Xcode8.遇到了一些问题,总结如下.希望对大家有所帮助. 一.如何去除控制台多余的打印信息. 方法:点击Product----Scheme-- ...

  4. Mininet在创建拓扑的过程中为什么不打印信息了——了解Mininet的log系统

    前言 写这篇博客是为了给我的愚蠢和浪费的6个小时买单! 过程原因分析 我用Mininet创建过不少拓扑了,这次创建的拓扑非常简单,如下图,创建拓扑的代码见github.在以前的拓扑创建过程中,我都是用 ...

  5. gc 辅助打印信息

    cat xx.xml|grep GC <jvm-arg>-XX:+PrintGCDetails</jvm-arg> <jvm-arg>-XX:+PrintGCDat ...

  6. OK335xS 网络连接打印信息 hacking

    /*********************************************************************** * OK335xS 网络连接打印信息 hacking ...

  7. 使用hibernate更新数据库记录的信息的相关学习记录

    截选代码(可能遗漏标点符号): package name.sql; import java.util.List; import name.session.HibernateSessionFactory ...

  8. iOS中忽略NSLog打印信息(通过PCH文件中定义DEBUG宏解决)

    iOS中忽略NSLog打印信息 解决办法: 1.新建PrefixHeader_pch文件,在该文件中定义一下宏 //通过DEBUG宏的定义来解决Debug状态下和Release状态下的输出 #ifde ...

  9. WPF 使用Console.Write打印信息到控制台窗口中

    WPF中使用Console.Write函数来打印信息是没有意义的,因为并没有给其输出字符的窗口.对于桌面程序来说,这是十分合理的,然而有时为了方便调试,在程序编写过程中打印出信息给程序员看还是必要的, ...

随机推荐

  1. rabbitmq系列三 之发布/订阅

    1.发布/订阅 在上篇教程中,我们搭建了一个工作队列,每个任务只分发给一个工作者(worker).在本篇教程中,我们要做的跟之前完全不一样 —— 分发一个消息给多个消费者(consumers).这种模 ...

  2. U8API——向U8数据库表导入数据

    一.打开API资源管理器 替换两个引用 打开应用实例,选择相应的功能 复制相应的封装类到自己的目录下 在数据库新建临时表,与目标表相同 数据导入: 思路:先将要导入的数据导入到与U8目标表相同的临时表 ...

  3. C语言 for循环之阶乘的算法

    int n; scanf("%d", &n); int fact = 1; int i = 1; while ( i <= n ) { fact *=i; i++; ...

  4. 剑指offer五十六之删除链表中重复的结点

    一.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  5. springBoot上传文件时MultipartFile报空问题解决方法

    springBoot上传文件时MultipartFile报空问题解决方法 1.问题描述: 之前用spring MVC,转成spring boot之后发现上传不能用.网上参考说是spring boot已 ...

  6. 在CentOS上装Redis

    Redis官网 $ wget http://download.redis.io/releases/redis-3.2.5.tar.gz $ tar xzf redis-.tar.gz $ cd red ...

  7. HUE配置文件hue.ini 的mapred_clusters模块详解(图文详解)(分HA集群和非HA集群)

    不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...

  8. springboot-13-junitTest

    junitTest, 提喜欢用的一个方法, 在测试代码时非常好用 1, 添加maven依赖 <!-- 加入spring-test依赖 --> <dependency> < ...

  9. mysql 导出数据到csv文件的命令

    1.导出本地数据库数据到本地文件 mysql -A service_db -h your_host -utest -ptest mysql> select * from t_apps where ...

  10. 深入SpringBoot:自定义Endpoint(转)

    本文转自:https://www.jianshu.com/p/9fab4e81d7bb 最近在研究改写actuator的方式,这些放这里已备忘 Endpoint SpringBoot的Endpoint ...