润乾自带的打印直接可以通过触发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. J04-Java IO流总结四 《 FileReader和FileWriter 》

    FileReader和FileWriter的源码相对简单,下面通过分析它们的源码以更好地进行理解这两个流 1. FileReader FileReader实现了读取底层的字节数据并将其转换为字符数据的 ...

  2. tcp ip三次握手链接和四次挥手断开

      先来个整体的流程图       一 三次握手目的是为了建立连接... 1 核心的就是client端和service端,进行数据"报文" 交换 2 报文,目的是互相通知,确认链接 ...

  3. 安装Hive-0.10.0-CDH4.5.0所遇异常

    Note: 虚拟机访问Win7中mysql(root用户+密码) hive出现异常1: FAILED: Error in metadata: java.lang.RuntimeException: U ...

  4. Linux grep命令详解[备份]

    linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...

  5. 关于Spring的一点东西

    Spring IoC 容器 容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁.Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件.这些对象被称为 Spr ...

  6. 使用Koa2搭建web项目

    随着Node.js的日益火热,各种框架开始层出不穷的涌现出来,Node.js也开始逐渐的被应用到处理服务端请求的场景中.搭建Web项目的框架也随之开始出现——express.koa.koa2.egg等 ...

  7. lucene源码分析(5)lucence-group

    1. 普通查询的用法 org.apache.lucene.search.IndexSearcher public void search(Query query, Collector results) ...

  8. Java Bad version

    Eclipse的三个地方需要重新设置: 在工程上点右键,选属性,三个地方: Java Build Path Java Compiler Project Facets:这个地方还可以设置tomcat的r ...

  9. 设计模式学习--面向对象的5条设计原则之Liskov替换原则--LSP

    一.LSP简介(LSP--Liskov Substitution Principle): 定义:如果对于类型S的每一个对象o1,都有一个类型T的对象o2,使对于任意用类型T定义的程序P,将o2替换为o ...

  10. CEF加载FLASH插件时弹出CMD命令行窗口的问题

    这个是flash插件的一个bug,CEF(chromium系列浏览器)关闭sandbox第一次加载flash插件就会跳出这样的一个提示,在Google官方也看到了chromium的issue: 解决方 ...