润乾自带的打印直接可以通过触发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. Delphi获取IdHTTP1.Get(url)的返回参数

    var   ss: TStringStream; begin   ss := TStringStream.Create('');   idHTTP1.get(url, ss);   ss.Positi ...

  2. Python基础8:列表推导式(list)字典推导式(dict) 集合推导式(set)

    推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 1.列表推导式也叫列表解析式.功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表格式:用中括号括起 ...

  3. 简单shell expect程序

    1 expect程序 用的Ubuntu,本身没带expect,安装. sudo apt-get install expect (关于expect,参见http://www.tclchina.com/a ...

  4. hbase集群中其中某个regionserver 没有启动

    第一步: date命令查看各个机器的时间 发现linux02机器时间差了2个多小时 第二步:ntpdate pool.ntp.org 修改错误时间的机器 第三步: 重启 hbase

  5. springcloud-03-服务注册

    新建一个 provider-user 和consumer-movie, user为服务提供者, movie为服务的消费真, 没有什么难的, 直接上代码 microserver-provider-use ...

  6. Koa2实用入门

    koa2已发布了一段时间,可以考虑入手,参见Node.js最新Web技术栈(2016年4月) 本文主要是koa 2的文档解读和runkoa介绍,让大家对koa 2有一个更简单直接的理解 一.依赖Nod ...

  7. Java线程池,你了解多少?

    一.前言 随着业务的发展,单线程已经远远不能满足,随即就有多线程的出现.多线程虽然能解决单线程解决不了的事情,但是它也会给你带来额外的问题.比如成千上万甚至上百万的线程时候,你系统就会出现响应延迟.卡 ...

  8. dev中文本框等获取焦点事件

    <ClientSideEvents GotFocus="GotFocus" /> editContract.SetFocus()//设置文本框等的焦点 function ...

  9. C# byte 和 char 转化

    C#  byte 和 char 可以认为是等价的.但是在文本显示的时候有差异.   c# 使用的是unicode字符集,应该和为ascii相互转换 只能转换到字符的unicode编码,或者由unico ...

  10. js 背景自动切换

    //首页自动更换背景特效开始============================================ var curIndex = 0; //时间间隔(单位毫秒),每秒钟显示一张,数组 ...