关于使用QRcode.jar生成二维码

时间:2022-11-19 11:37:48

需要做一个小小的功能就是在页面形成一个箱标签,其中就包括显示出一位条形码和二维条形码,在网上查了很多资料,有些不是太全,有些也不是太明白,后来绞尽脑汁,调了又调可算是做出来了,下面是我的一些经验,希望对大家有所帮助。

我们先看下效果:

关于使用QRcode.jar生成二维码

1.首先建立一个WEB项目---------

2.引入QRcode.jar包,下载地址:我的资源中

3.分两种情况,根据你的项目需求:3.1,需要生成出一张二维码图片 3.2,需要直接在WEB页面上显示

3.1,直接建立普通Java类,代码如下:


import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;


import javax.imageio.ImageIO;


import com.swetake.util.Qrcode;


public class CreateTwoBarImage {
public void creatTxm(String param) throws Exception {  
        Qrcode qrcode = new Qrcode();  
        qrcode.setQrcodeErrorCorrect('M');  
        qrcode.setQrcodeEncodeMode('B');  
        qrcode.setQrcodeVersion(7);  
  
        byte[] bstr = param.getBytes("UTF-8");  
        BufferedImage bi = new BufferedImage(139, 139,BufferedImage.TYPE_INT_RGB);  
        Graphics2D g = bi.createGraphics();  
        g.setBackground(Color.WHITE);   //背景颜色  
        g.clearRect(0, 0, 139, 139);  
        g.setColor(Color.BLACK);    //条码颜色  
        if (bstr.length > 0 && bstr.length < 123) {  
            boolean[][] b = qrcode.calQrcode(bstr);  
            for (int i = 0; i < b.length; i++) {  
                for (int j = 0; j < b.length; j++) {  
                    if (b[j][i]) {  
                        g.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);  
                    }  
                }  
  
            }  
        }  
        g.dispose();  
        bi.flush();  
        String FilePath = "d:/images/"+param+".jpg";  
        File f = new File(FilePath);  
        ImageIO.write(bi, "jpg", f);  
    } 
public static void main(String args[]){
try {
new CreateTwoBarImage().creatTxm("c123456789");
} catch (Exception e) {
e.printStackTrace();
}
}
}

3.2 需要直接在WEB页面上显示,这个地方就要参考生成使用maskbarcode.jar生成一维码的原理了,你要是直接在页面直接引入刚刚生成的图片,那么你的经理会不太满意的

好把,让他在servlet中进行吧,代码如下:

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;


import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.swetake.util.Qrcode;


public class PrintTwoBarCodeServlet extends HttpServlet{


/**
* 专门用来生成二维码图片的servlet
*/
private static final long serialVersionUID = 1L;


@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String code = request.getParameter("code");

Qrcode testQrcode =new Qrcode();
testQrcode.setQrcodeErrorCorrect('M');
testQrcode.setQrcodeEncodeMode('B');
testQrcode.setQrcodeVersion(7);
byte[] d = code.getBytes("gbk");
BufferedImage image = new BufferedImage(98, 98, BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = image.createGraphics();
g.setBackground(Color.WHITE);
g.clearRect(0, 0, 98, 98);
g.setColor(Color.BLACK);
if (d.length>0 && d.length <120){
boolean[][] s = testQrcode.calQrcode(d);
for (int i=0;i<s.length;i++){
for (int j=0;j<s.length;j++){
if (s[j][i]) {
g.fillRect(j*2+3,i*2+3,2,2);
}
}
}
}
        g.dispose();
image.flush();
        ImageIO.write(image, "jpg", response.getOutputStream());
}
}

现在我们只需要像配置一维码那样,配置下就可以使用了:

 <!-- 以下是二维条码的配置信息 -->
  <servlet>
  <servlet-name>PrintTwoBarCodeServlet</servlet-name>
  <servlet-class>com.dcecSupplyWEB.servlet.PrintTwoBarCodeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>PrintTwoBarCodeServlet</servlet-name>
  <url-pattern>/servlet/PrintTwoBarCodeServlet</url-pattern>
  </servlet-mapping>

最后页面JSP:

<body>

二维条码:<br><img src="servlet/PrintTwoBarCodeServlet?code=C123456789"/>

</body>