package com.goldgrid.qrcode.qrcodeone;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import com.swetake.util.Qrcode;
public class EncoderHandler {
public void encoderQRCoder(String content, HttpServletResponse response) {
try {
Qrcode handler = new Qrcode();
handler.setQrcodeErrorCorrect('M');
handler.setQrcodeEncodeMode('B');
handler.setQrcodeVersion(12);
System.out.println(content);
byte[] contentBytes = new byte[4096];
contentBytes = content.getBytes("UTF-8");
System.out.println("---------"+contentBytes.length);
BufferedImage bufImg = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, 200, 200);
//设定图像颜色:BLACK
gs.setColor(Color.BLACK);
//设置偏移量 不设置肯能导致解析出错
int pixoff = 2;
//输出内容:二维码
if(contentBytes.length > 0 && contentBytes.length < 2000) {
boolean[][] codeOut = handler.calQrcode(contentBytes);
for(int i = 0; i < codeOut.length; i++) {
for(int j = 0; j < codeOut.length; j++) {
if(codeOut[j][i]) {
gs.fillRect(j * 3 + pixoff, i * 3 + pixoff,3, 3);
}
}
}
} else {
System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,2000 ]. ");
}
gs.dispose();
bufImg.flush();
//生成二维码QRCode图片
ImageIO.write(bufImg, "jpg", response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.goldgrid.qrcode.utils;
import java.util.Collection;
import javax.servlet.ServletException;
import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ScriptSessionFilter;
import org.directwebremoting.WebContextFactory;
public class DwrImage {
public void onPageLoad(String uuid) {
System.out.println("gotoOnPage:"+uuid);
ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
scriptSession.setAttribute("userId", uuid);
/*DwrScriptSessionManagerUtil dwrScriptSessionManager = new DwrScriptSessionManagerUtil();
try {
dwrScriptSessionManager.init();
} catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
public void sendMsg(String userid, String message, String jsFuc) {
final String userId = userid;
final String msg = message;
final String jsFunc = jsFuc;
Browser.withAllSessionsFiltered(new ScriptSessionFilter(){
public boolean match(ScriptSession session) {
if (session.getAttribute("userId")==null){
return false;
}else {
return (session.getAttribute("userId")).equals(userId);
}
//return true;
}
}, new Runnable(){
private ScriptBuffer script = new ScriptBuffer();
public void run() {
// 推送消息
script.appendCall(jsFunc,msg);
Collection<ScriptSession>sessions = Browser.getTargetSessions();
for (ScriptSession scriptSession : sessions) {
scriptSession.addScript(script);
}
}
});
}
}
package com.goldgrid.qrcode.utils;
import java.util.UUID;
/**
*@time 2017年10月27日上午9:28:59
*@auth NK
*/
public class UUIDUtil {
public String getUuid(){
String uuid = UUID.randomUUID().toString();
return uuid.replaceAll("-", "");
}
}
qrcode.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="com.goldgrid.qrcode.utils.UUIDUtil"%>
<% String path=request.getContextPath();
String basepath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
UUIDUtil uuid=new UUIDUtil();
String UUID = uuid.getUuid();
session.setAttribute("UUID", UUID);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="shortcut icon" href="#" />
<base herf="<%=basepath %>"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>DWR推送消息</title>
<script type="text/javascript" src="<%=request.getContextPath() %>/qrcode/jquery-1.7.2.js"></script>
<script type='text/javascript' src='<%=request.getContextPath() %>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=request.getContextPath() %>/dwr/util.js'></script>
<script type='text/javascript' src='<%=request.getContextPath() %>/dwr/interface/DwrImage.js'></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/qrcode/jq-signature.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/qrcode/jq-signature.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/qrcode/jquery.easyui.min.js"></script>
<script>
function init(){
dwr.engine.setActiveReverseAjax(true);
dwr.engine.setNotifyServerOnPageUnload(true);
DwrImage.onPageLoad('<%=UUID%>');
dwr.engine._errorHandler = function(message, ex) {dwr.engine._debug("Error: " + ex.name + ", " + ex.message, true);};
}
window.onload = init;
function receiveMsg(msg){
$("#content").attr("src", msg);
}
</script>
<style>
body{margin:0px;padding:0px;}
/*{transform就是专门为img图片设置的旋转*/
#content{transform:rotate(270deg); border:1px solid black;}
</style>
</head>
<body>
<img id="erweima" title="二维码" style="height:120px;width:120px" src="QRServlet" />
<img id="content" style="height:120px;width:120px;" src=""/>
<!-- <div id="contentext" style=" width: 120px ;height: 120px;border : 1px solid ; text-align: center ; padding: 5px;"></div> -->
</body>
</html>
signature.jsp
<!doctype html>
<%
String protocol = request.getScheme();
String serverIP = request.getServerName();
int port = request.getServerPort();
String uuid = request.getParameter("keyID");
//String uuid=(String)session.getAttribute("UUID");
String areaCode = request.getParameter("AreaCode");
String businessID = request.getParameter("BusinessID");
/* out.println("签名页接收到---keyid----"+uuid);
out.println("签名页接收到---areaCode----"+areaCode);
out.println("签名页接收到---businessID----"+businessID); */
String _ctx = (request.getContextPath()).equalsIgnoreCase("/") ? "" : request.getContextPath();
String url = protocol + "://"+ serverIP + ":" + port + _ctx;
String porurl = url + "/SignatureServlet";
%>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>签名</title>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="base.css">
<link rel="stylesheet" href="index.css">
<script src="jquery-1.12.4.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/qrcode/jquery-1.7.2.js"></script>
<script type='text/javascript' src='<%=request.getContextPath() %>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=request.getContextPath() %>/dwr/util.js'></script>
<script type='text/javascript' src='<%=request.getContextPath() %>/dwr/interface/DwrImage.js'></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/qrcode/jq-signature.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/qrcode/jq-signature.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/qrcode/jquery.easyui.min.js"></script>
<script>
function init(){
dwr.engine.setActiveReverseAjax(true);
dwr.engine.setNotifyServerOnPageUnload(true);
DwrImage.onPageLoad("<%=uuid%>");
dwr.engine._errorHandler = function(message, ex) {dwr.engine._debug("Error: " + ex.name + ", " + ex.message, true);};
}
window.onload = init;
</script>
</head>
<body>
<!--头部占位-->
<div style="height: 44px;background-color: #0095EE;">
</div>
<div class="container">
<div class="top clearfix">
<div class="bottom clearfix">
<div>
<button id="saveBtn" class="btn btn-default" οnclick="saveSignature();" disabled
style="width: 50px;height: 50px;background:#0095EE;color:#ffffff;transform: rotate(90deg);position:absolute;bottom:135px;border-radius:5px;">保存</button>
</div>
<div>
<button id="clearBtn" class="btn btn-default" οnclick="clearCanvas();"
style="width: 50px;height: 50px;background:#ffffff;color:#0095EE;transform: rotate(90deg);position:absolute;bottom:65px;border-radius:5px;">清除</button>
</div>
</div>
<div class="row" style="display: none;">
<div class="col-xs-12">
<div class="js-signature"></div>
</div>
</div>
<div class="top-left clearfix">
<div class="top-kuang">
<div class="top-xukuang">
<div class="js-signature" data-width="600" data-height="580"
data-border="1px solid white" data-line-color="#000000" data-auto-fit="true"></div>
</div>
</div>
</div>
<div id="signature">
<p>
</p>
</div>
<div class="top-right">
<span><img class="img-logo" src="imgs/logo.png" alt=""></span>
</div>
<div class="top-r-drs"><span>安徽电信无纸化系统</span></div>
<!--<span class="xingxing"></span>-->
<div class="top-r-drst">
<span><img class="img-xing" src="imgs/xing.png" alt=""></span><span style="vertical-align: middle;">无纸化受理符合国家签名法,具有纸质文档同等法律效力</span>
</div>
</div>
</div>
<script >
$(document).on('ready', function() {
if ($('.js-signature').length) {
$('.js-signature').jqSignature();
}
});
function clearCanvas() {
$('.js-signature').eq(1).jqSignature('clearCanvas');
$('#saveBtn').attr('disabled', true);
}
function saveSignature() {
$('#signature').empty();
var dataUrl = $('.js-signature').eq(1).jqSignature('getDataURL');
$.ajax({
url : '<%=porurl %>',
type : "post",
data : {
commond : 'save',
keyID : '<%=uuid %>',
areaCode : '<%=areaCode %>',
businessID : '<%=businessID %>',
basePicture : dataUrl
},
success : function(data) {
if(data == 1){
DwrImage.sendMsg("<%=uuid%>", dataUrl, "receiveMsg");
alert("保存签名成功");
<%-- DwrImage.sendMsg("<%=uuid%>", dataUrl, "receiveMsg"); --%>
window.close();
}else if(data==2){
DwrImage.sendMsg("<%=uuid%>", dataUrl, "receiveMsg");
alert("更新签名成功");
<%-- DwrImage.sendMsg("<%=uuid%>", dataUrl, "receiveMsg"); --%>
window.close();
}
}
});
// var img = $('<img>').attr('src', dataUrl);
// $('#signature').append(img);
}
$('.js-signature').eq(1).on('jq.signature.changed', function() {
$('#saveBtn').attr('disabled', false);
});
var winWid = $(window).width();
var rW = Math.floor(winWid/5);
var poRW = Math.floor(rW/2)+10;
$('.top-r-drs').css('right',poRW);
$('.top-r-drst').css('right',poRW);
// $('.xingxing').css('right',poRW);
var winHei = $(window).height();
var lHei = winHei-44-40;
var inHei = lHei-16;
var mgTHei = -Math.floor(inHei/2);
$('.top-kuang').css('height',lHei);
$('.top-xukuang').css('height',inHei);
$('.bottom').css('height',winHei);
$('.top-xukuang').css('margin-top',mgTHei);
// $('.top-left').css('margin-top',lHei);
</script>
</body>
</html>