生成條形碼顯示到界面

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的代碼。支持多種格式的條形碼生成。

發佈了27 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章