ブラウザで電子サインをする方法をご紹介します。
Spring Bootプロジェクトベースのサンプルを作成します。描画ライブラリとしてSignature Padを使用します。完成形は次のようになります。
初期状態はまっさらな状態です。電子サインをかける領域に左クリックを押した状態でカーソルを動かすと書くことが出来ます。

undoボタンをクリックすると一筆戻ります。

resetボタンをクリックすると初期状態に戻ります。

フォルダ構成です。

ソースコードです。
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>SampleSignaturePad</title>
<script src="js/jquery-3.3.1.min.js"></script>
<script src="js/signature_pad/2.3.2/dist/signature_pad.min.js"></script>
<script src="js/script.js"></script>
</head>
<body>
<canvas width="560" height="280" style="border: 2px solid;"></canvas>
<div>
<button id="reset">reset</button>
<button id="save">save</button>
<button id="undo">undo</button>
</div>
</body>
</html>
script.js
$(function() {
let canvas = document.querySelector("canvas");
let signaturePad = new SignaturePad(canvas);
$("#reset").on("click", function reset() {
signaturePad.clear();
});
$("#save").on("click", function save() {
let dataURL = signaturePad.toDataURL();
let imageString = dataURL.split(",")[1];
$.ajax({
url : './',
type : 'POST',
data : {
"imageString" : imageString
},
error : function() {
console.log("error");
},
success : function(xml) {
console.log("success");
}
});
});
$("#undo").on("click", function undo() {
var data = signaturePad.toData();
if (data) {
data.pop(); // remove the last dot or line
signaturePad.fromData(data);
}
});
});
javascriptライブラリのsignature_padを使用しています。
SampleController.java
package com.abc.app.controller;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class SampleController {
@GetMapping(value = "/")
public ModelAndView index(ModelAndView mav) {
mav.setViewName("index");
return mav;
}
@PostMapping(value = "/")
public ModelAndView postTestjob(String imageString, ModelAndView mav) throws IOException {
// create a buffered image
BufferedImage image = null;
byte[] imageByte;
java.util.Base64.Decoder e = java.util.Base64.getDecoder();
imageByte = e.decode(imageString);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(bis);
bis.close();
ImageIO.write(image, "png", new File("fuga.png"));
mav.setViewName("index");
return mav;
}
}
以上、ブラウザで電子サインをする方法でした。