ブラウザで電子サインをする方法をご紹介します。
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; } }
以上、ブラウザで電子サインをする方法でした。