zoukankan      html  css  js  c++  java
  • 关于使用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>

  • 相关阅读:
    CF627A Xor Equation
    CF865C Gotta Go Fast
    HDU 2222 Keywords Search
    BZOJ 2038: [2009国家集训队]小Z的袜子(hose)
    BZOJ 3781: 小B的询问
    BZOJ 1086: [SCOI2005]王室联邦
    BZOJ 2120: 数颜色
    BZOJ 1503: [NOI2004]郁闷的出纳员
    BZOJ 3757: 苹果树
    BZOJ 1861: [Zjoi2006]Book 书架
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317929.html
Copyright © 2011-2022 走看看