1、生成條形碼的java後臺代碼如下,需要下載jbarcode-0.2.8.jar
package com.xxx;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jbarcode.JBarcode;
import org.jbarcode.encode.Code128Encoder;
import org.jbarcode.encode.Code39Encoder;
import org.jbarcode.encode.EAN13Encoder;
import org.jbarcode.encode.InvalidAtributeException;
import org.jbarcode.paint.BaseLineTextPainter;
import org.jbarcode.paint.EAN13TextPainter;
import org.jbarcode.paint.WideRatioCodedPainter;
import org.jbarcode.paint.WidthCodedPainter;
public class BarCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private JBarcode jBarcode;
/**
* 初始化條形碼對象
*/
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
// 默認生成code39類型條形碼
jBarcode = new JBarcode(Code39Encoder.getInstance(),
WideRatioCodedPainter.getInstance(),
BaseLineTextPainter.getInstance());
jBarcode.setShowText(true);// 顯示圖片下字符串內容
jBarcode.setShowCheckDigit(true);// 顯示字符串內容中是否顯示檢查碼內容
jBarcode.setCheckDigit(false);// 不生成檢查碼
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("image/gif");
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
// 傳入的參數,
// 如果是判斷條件,則用0,1表示,‘0’即無效或者不現實,‘1’即有效或者顯示
// 字符串參數
String msg = req.getParameter("msg");
// 是否顯示圖片下字符串內容
String showText = req.getParameter("st");
// 是否顯示檢查碼內容
String showCheckDigit = req.getParameter("scd");
// 是否生成檢查碼
String checkDigit = req.getParameter("cd");
// 生成條形碼類型
String codeType = req.getParameter("codeType");
//設置條形碼barHeight
String barH = req.getParameter("barH");
//設置XDimension
String barXD = req.getParameter("barXD");
// 判斷字符串內容
if (msg == null)
//msg = "788515004012";
// 判斷顯示圖片下字符串內容
if ("0".equals(showText))
jBarcode.setShowText(false);
//判斷barHeight
if(barH != null && !barH.equals("")){
double x = Double.valueOf(barH);
jBarcode.setBarHeight(x);
}
if(barXD != null && !barXD.equals("")){
try {
//jBarcode.setWideRatio(10);
jBarcode.setXDimension(Double.valueOf(barXD));
} catch (InvalidAtributeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
try {
//jBarcode.setWideRatio(10);
jBarcode.setXDimension(Double.valueOf(0.5));
} catch (InvalidAtributeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 判斷顯示檢查碼內容
if ("1".equals(showCheckDigit))
jBarcode.setShowText(true);
// 判斷生成檢查碼
if ("1".equals(checkDigit))
jBarcode.setShowText(true);
// 判斷生成條形碼類型
if(codeType != null && !"".equals(codeType)){
if (codeType.equalsIgnoreCase("EAN13")) {
// EAN13條形碼基本屬性,必要添加條件
jBarcode.setEncoder(EAN13Encoder.getInstance());
jBarcode.setPainter(WidthCodedPainter.getInstance());
jBarcode.setTextPainter(EAN13TextPainter.getInstance());
//必須需要以下屬性
jBarcode.setCheckDigit(true);
} else if(codeType.equalsIgnoreCase("code128")){
jBarcode.setEncoder(Code128Encoder.getInstance());
jBarcode.setPainter(WidthCodedPainter.getInstance());
jBarcode.setTextPainter(BaseLineTextPainter.getInstance());
jBarcode.setCheckDigit(false);
jBarcode.setShowCheckDigit(false);
}else{
// 這裏設置 根據不同的條件設定生成的條形碼基本屬性,如EAN13。
// 通過if...else...來判斷即可
// 默認生成的是Code39
// 默認生成code39類型條形碼
}
}
// 生成條形碼,並通過輸出來展示在頁面上
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedImage localBufferedImage = jBarcode.createBarcode(msg);
ImageIO.write(localBufferedImage, "png", out);
byte[] b = out.toByteArray();
resp.getOutputStream().write(b);
} catch (InvalidAtributeException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
doGet(req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、前臺jsp顯示代碼:傳遞的參數可以自己設置,參考java後臺代碼jBarcode對象。
<img style="vertical-align:middle;" src="<%=request.getContextPath()%>/BarCodeServlet?msg=${placeOrderNo}&barH=12.2&barXD=0.4&codeType=code128"/>
3、在web.xml配置java類:
<servlet>
<servlet-name>BarCodeServlet</servlet-name>
<servlet-class>com.xxx.BarCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BarCodeServlet</servlet-name>
<url-pattern>/BarCodeServlet</url-pattern>
</servlet-mapping>
注:對於jBarcode的參數設置可以看引用的包裏面的org.jbarcode.demo的代碼。支持多種格式的條形碼生成。