润乾自带的打印直接可以通过触发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. WebAPI POST GET

    简而言之,在WEBAPI中采用GET方法方法时在接受参数的时候会在参数前申明 [fromuri]标注从uri中获取如: [HttpPost] public IHttpActionResult AddP ...

  2. ★ phpStudy安装SSL证书实现https链接

    [准备] (1)phpstudy下载:http://phpstudy.php.cn/ (2)phpstudy集成环境下正常运行的网站 (3)避免意外请先备份(复制)好httpd.conf配置文件   ...

  3. 给button添加UAC的小盾牌图标

    Sample Code: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private v ...

  4. 获取设备信息——获取客户端ip地址和mac地址

    1.获取本地IP(有可能是 内网IP,192.168.xxx.xxx) /** * 获取本地IP * * @return */ public static String getLocalIpAddre ...

  5. Jmeter参数化与检查点

    一.Jmeter参数话有3种方法: 1. add->pre processors->user parameter(用户参数) 2.add->config Element->CS ...

  6. c# static用法

    有时候写程序时常常遇到这样的情况:   1.定义了变量和方法不知道什么时候该加上static修饰符. 2.static变量和方法与非static变量和方法有什么区别? 3.在一个类的静态方法里为什么不 ...

  7. Jenkins 学习笔记(一)

    Jenkins 要学习Jenkins首先要了解一个概念---持续集成,持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次 ...

  8. chroot的用法

    chroot命令用来在指定的根目录下运行指令.chroot,即 change root directory (更改 root 目录).在 linux 系统中,系统默认的目录结构都是以/,即是以根 (r ...

  9. node服务端搭建学习笔记

    咳咳,终于迈出这一步了...这篇文章将是边学边写的真正笔记...用于mark下学习过程中的点滴~ 开篇先把我学习参考的文章来源给出,以表示对前人的尊敬: https://github.com/nswb ...

  10. Ceph 存储集群 - 存储池

    目录 一.存储池介绍 二.存储池命令 1. 列出存储池 2. 创建存储池 3. 设置存储池配额 4. 删除存储池 5. 重命名存储池 6. 查看存储池统计信息 7. 生成存储池快照 8. 删除存储池快 ...