QR코드 바코드 생성
Zxing 라이브러리를 이용해서 만들어보자!
1. Zxing 이란 ?
Zxing 라이브러리는 구글에서 개발한 오픈소스 QR 코드 스캔 및 바코드 인식등이 가능하다.
하기에서 URL 생성 후 QR 코드 넣기를 구현하기 위해 간단한 예제를 해보았다.
2. pom.xml에 추가
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.1.0</version>
</dependency>
2. Home.jsp Source
텍스트 코드를 입력할 수 있는 Input 하나와 QR코드 생성 요청을 하는 버튼 하나로 구성되어있다.
버튼을 클릭하면 function에 정의된 url이 img택그에 src속성으로 정의된다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<html>
<head>
<title>Home</title>
<script type="text/javascript">
$(document).ready(function(){
$("#execute").click(function(){
alert("s");
url="/qr";
var content = $("#content").val();
$("#img").attr("src",url+"?content="+content);
});
});
</script>
</head>
<body>
<h1>Zxing Code Test</h1>
<div>
<input id="content" type="text" name="content" />
<input type="button" id="execute" value="QR코드 생성" />
<img id="img" style="display:none;" onload="this.style.display = 'block'"/>
</div>
</body>
</html>
3. servlet-context.xml
상단에 "xmlns:p="http://www.springframework.org/schema/p"" 추가
컨트롤러에서 리턴한 뷰를 받기 위해 ViewResolver를 기본적으로 사용하는 InternalResourceViewResolver 외에 BeanNameResolver를 하나 더 정의하였다.
order 속성을 보면 BeanNameViewResolver를 1로 정의해 놓았으니 해당 ViewResolver가 우선권을 가지게 된다
뷰를 찾을 수 있도록 해당 뷰를 다음과 같이 Bean으로 등록해놔야 한다.
<beans:bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"
p:order="2"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/views/" /*view 파일 위치 선정*/
p:suffix=".jsp"
/>
<beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="1"/>
/*qr코드 생성 클래스 정의*/
<beans:bean id="qrcodeview" class="com.study.batch.QRCodeView"/>
4. Controller Source
단순히 ModelAndView 객체를 통해 뷰와 home.jsp에서 넘어온 파라미터만 리턴한다.
@RequestMapping("/qr")
public ModelAndView qrcode(@RequestParam String content) {
return new ModelAndView("qrcodeview","content",content);
}
5. QRCodeView.java
ViewResolver를 통해 "qrcodeview"라는 Bean을 호출하게 된다.
다운로드가 아닌 뷰 자체가 이미지가 되야하기 때문에 컨텐츠 타입을 image/png로 설정
package com.study.batch;
import java.io.OutputStream;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.AbstractView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
public class QRCodeView extends AbstractView{
public QRCodeView() {
setContentType("image/png; charset=UTF-8");
}
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest req,
HttpServletResponse res) throws Exception {
res.setContentType(getContentType());
res.setHeader("Content-Transfer-Encoding", "binary");
OutputStream out = res.getOutputStream();
QRCodeWriter qr = new QRCodeWriter();
String text = (String) model.get("content");
text = new String(text.getBytes("UTF-8"),"ISO-8859-1");
BitMatrix bitMatrix = qr.encode(text, BarcodeFormat.QR_CODE, 100, 100);
/*BitMatrix bit
* Matrix = barcode.encode(text, BarcodeFormat.CODE_128, 100, 100);*/
// zxing에서 스트림에 파일을 뿌릴수있도록 메소드를 지원함.
MatrixToImageWriter.writeToStream(bitMatrix, "png", out);
out.flush();
}
}
6.결과물
'Study > Java' 카테고리의 다른 글
자바 암호화 sha- 256, sha-512 (0) | 2020.11.10 |
---|---|
[FCM]파이어베이스에서 안드로이드로 보내기 (0) | 2020.04.29 |
Google Analtyics (0) | 2020.02.20 |
System.getProperty() Argument 종류 (0) | 2020.02.14 |
접속자 정보 가져오기 (0) | 2020.02.14 |
댓글