본문 바로가기
Study/Java

QR 코드, 바코드 생성하기

by 오늘만 사는 여자 2020. 2. 27.
728x90
반응형

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.결과물

 

참조 : https://m.blog.naver.com/PostView.nhn?blogId=weekamp&logNo=221505421042&proxyReferer=https%3A%2F%2Fwww.google.com%2F

728x90
반응형

'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

댓글