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