java生成条形码

12 篇文章 0 订阅
index.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>barcode</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<table border="1">
<tr>
<td>
<h1>
code39
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=0123456789&type=code39"
height="100px" width=300px />
</td>
<td>
<h1>
code128
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=0123456789&type=code128"
height="100px" width=300px />
</td>
<td>
<h1>
Codabar
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=0123456789&type=codabar"
height="100px" width=300px />
</td>
</tr>
<tr>
<td>
<h1>
intl2of5
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=01234567890540&type=intl2of5"
height="100px" width=300px />
</td>
<td>
<h1>
upc-a
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=012345678912&type=upc-a"
height="100px" width=300px />
</td>
<td>
<h1>
ean-13
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=200123457893&type=ean-13"
height="100px" width=300px />
</td>
<td>
<h1>
ean-8
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=20123451&type=ean-8"
height="100px" width=300px />
</td>
</tr>
<tr>
<td>
<h1>
postnet
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=01234567890540&type=postnet"
height="100px" width=300px />
</td>
<td>
<h1>
royal-mail-cbc
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=012345AS678912&type=royal-mail-cbc"
height="100px" width=300px />
</td>
<td>
<h1>
pdf417
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=200123457893&type=pdf417"
height="100px" width=300px />
</td>
<td>
<h1>
datamatrix
</h1>
<img
src="<%=request.getContextPath()%>/barcodeServlet?msg=20123451&type=datamatrix"
height="100px" width=300px />
</td>
</tr>
</table>
</body>
</html>

BarcodeServlet.java的代码如下:
/*
* Copyright 2002-2007 Jeremias Maerki or contributors to Barcode4J, as applicable
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.krysalis.barcode4j.servlet;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;

import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.Logger;
import org.krysalis.barcode4j.BarcodeGenerator;
import org.krysalis.barcode4j.BarcodeUtil;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.output.eps.EPSCanvasProvider;
import org.krysalis.barcode4j.output.svg.SVGCanvasProvider;
import org.krysalis.barcode4j.tools.MimeTypes;

/**
* Simple barcode servlet.
*
* @version $Id: BarcodeServlet.java,v 1.6 2007/01/19 12:26:55 jmaerki Exp $
*/
public class BarcodeServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 1L;
/** Parameter name for the message */
public static final String BARCODE_MSG = "msg";
/** Parameter name for the barcode type */
public static final String BARCODE_TYPE = "type";
/** Parameter name for the barcode height */
public static final String BARCODE_HEIGHT = "height";
/** Parameter name for the module width */
public static final String BARCODE_MODULE_WIDTH = "mw";
/** Parameter name for the wide factor */
public static final String BARCODE_WIDE_FACTOR = "wf";
/** Parameter name for the quiet zone */
public static final String BARCODE_QUIET_ZONE = "qz";
/** Parameter name for the human-readable placement */
public static final String BARCODE_HUMAN_READABLE_POS = "hrp";
/** Parameter name for the output format */
public static final String BARCODE_FORMAT = "fmt";
/** Parameter name for the image resolution (for bitmaps) */
public static final String BARCODE_IMAGE_RESOLUTION = "res";
/** Parameter name for the grayscale or b/w image (for bitmaps) */
public static final String BARCODE_IMAGE_GRAYSCALE = "gray";
/** Parameter name for the font size of the human readable display */
public static final String BARCODE_HUMAN_READABLE_SIZE = "hrsize";
/** Parameter name for the font name of the human readable display */
public static final String BARCODE_HUMAN_READABLE_FONT = "hrfont";
/** Parameter name for the pattern to format the human readable message */
public static final String BARCODE_HUMAN_READABLE_PATTERN = "hrpattern";


private Logger log = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);

/**
* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest, HttpServletResponse)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
String format = determineFormat(request);
int orientation = 0;
Configuration cfg = buildCfg(request);
String msg = request.getParameter(BARCODE_MSG);
if (msg == null) msg = "6935840910605";
//6901687230107
BarcodeUtil util = BarcodeUtil.getInstance();
BarcodeGenerator gen = util.createBarcodeGenerator(cfg);
ByteArrayOutputStream bout = new ByteArrayOutputStream(4096);
try {
if (format.equals(MimeTypes.MIME_SVG)) {
//Create Barcode and render it to SVG
SVGCanvasProvider svg = new SVGCanvasProvider(false, orientation);
gen.generateBarcode(svg, msg);
org.w3c.dom.DocumentFragment frag = svg.getDOMFragment();

//Serialize SVG barcode
TransformerFactory factory = TransformerFactory.newInstance();
Transformer trans = factory.newTransformer();
Source src = new javax.xml.transform.dom.DOMSource(frag);
Result res = new javax.xml.transform.stream.StreamResult(bout);
trans.transform(src, res);
} else if (format.equals(MimeTypes.MIME_EPS)) {
EPSCanvasProvider eps = new EPSCanvasProvider(bout, orientation);
gen.generateBarcode(eps, msg);
eps.finish();
} else {
String resText = request.getParameter(BARCODE_IMAGE_RESOLUTION);
int resolution = 300; //dpi
if (resText != null) {
resolution = Integer.parseInt(resText);
}
if (resolution > 2400) {
throw new IllegalArgumentException(
"Resolutions above 2400dpi are not allowed");
}
if (resolution < 10) {
throw new IllegalArgumentException(
"Minimum resolution must be 10dpi");
}
String gray = request.getParameter(BARCODE_IMAGE_GRAYSCALE);
BitmapCanvasProvider bitmap = ("true".equalsIgnoreCase(gray)
? new BitmapCanvasProvider(
bout, format, resolution,
BufferedImage.TYPE_BYTE_GRAY, true, orientation)
: new BitmapCanvasProvider(
bout, format, resolution,
BufferedImage.TYPE_BYTE_BINARY, false, orientation));
gen.generateBarcode(bitmap, msg);
bitmap.finish();
}
} finally {
bout.close();
}
response.setContentType(format);
response.setContentLength(bout.size());
response.getOutputStream().write(bout.toByteArray());
response.getOutputStream().flush();
} catch (Exception e) {
log.error("Error while generating barcode", e);
throw new ServletException(e);
} catch (Throwable t) {
log.error("Error while generating barcode", t);
throw new ServletException(t);
}
}

/**
* Check the request for the desired output format.
* @param request the request to use
* @return MIME type of the desired output format.
*/
protected String determineFormat(HttpServletRequest request) {
String format = request.getParameter(BARCODE_FORMAT);
format = MimeTypes.expandFormat(format);
if (format == null) format = MimeTypes.MIME_JPEG;
return format;
}

/**
* Build an Avalon Configuration object from the request.
* @param request the request to use
* @return the newly built COnfiguration object
* @todo Change to bean API
*/
protected Configuration buildCfg(HttpServletRequest request) {
DefaultConfiguration cfg = new DefaultConfiguration("barcode");
//Get type
String type = request.getParameter(BARCODE_TYPE);
if (type == null) type = "code128";
DefaultConfiguration child = new DefaultConfiguration(type);
cfg.addChild(child);
//Get additional attributes
DefaultConfiguration attr;
String height = request.getParameter(BARCODE_HEIGHT);
if (height != null) {
attr = new DefaultConfiguration("height");
attr.setValue(height);
child.addChild(attr);
}
String moduleWidth = request.getParameter(BARCODE_MODULE_WIDTH);
if (moduleWidth != null) {
attr = new DefaultConfiguration("module-width");
attr.setValue(moduleWidth);
child.addChild(attr);
}
String wideFactor = request.getParameter(BARCODE_WIDE_FACTOR);
if (wideFactor != null) {
attr = new DefaultConfiguration("wide-factor");
attr.setValue(wideFactor);
child.addChild(attr);
}
String quietZone = request.getParameter(BARCODE_QUIET_ZONE);
if (quietZone != null) {
attr = new DefaultConfiguration("quiet-zone");
if (quietZone.startsWith("disable")) {
attr.setAttribute("enabled", "false");
} else {
attr.setValue(quietZone);
}
child.addChild(attr);
}

// creating human readable configuration according to the new Barcode Element Mappings
// where the human-readable has children for font name, font size, placement and
// custom pattern.
String humanReadablePosition = request.getParameter(BARCODE_HUMAN_READABLE_POS);
String pattern = request.getParameter(BARCODE_HUMAN_READABLE_PATTERN);
String humanReadableSize = request.getParameter(BARCODE_HUMAN_READABLE_SIZE);
String humanReadableFont = request.getParameter(BARCODE_HUMAN_READABLE_FONT);

if (!((humanReadablePosition == null)
&& (pattern == null)
&& (humanReadableSize == null)
&& (humanReadableFont == null))) {
attr = new DefaultConfiguration("human-readable");

DefaultConfiguration subAttr;
if (pattern != null) {
subAttr = new DefaultConfiguration("pattern");
subAttr.setValue(pattern);
attr.addChild(subAttr);
}
if (humanReadableSize != null) {
subAttr = new DefaultConfiguration("font-size");
subAttr.setValue(humanReadableSize);
attr.addChild(subAttr);
}
if (humanReadableFont != null) {
subAttr = new DefaultConfiguration("font-name");
subAttr.setValue(humanReadableFont);
attr.addChild(subAttr);
}
if (humanReadablePosition != null) {
subAttr = new DefaultConfiguration("placement");
subAttr.setValue(humanReadablePosition);
attr.addChild(subAttr);
}
child.addChild(attr);
}
return cfg;
}
}


web.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>barcodeServlet</servlet-name>
<servlet-class>org.krysalis.barcode4j.servlet.BarcodeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>barcodeServlet</servlet-name>
<url-pattern>/barcodeServlet</url-pattern>
</servlet-mapping>
</web-app>

需要导入的包有:

avalon-framework-4.2.0.jar
barcode4j.jar


当在地址栏中输入:http://localhost:8080/barCode后按下enter后
显示的结果为:
[img]
[img]http://dl.iteye.com/upload/attachment/0083/0759/c03dba02-9503-3ce2-b9bf-3a662719fc1d.jpg[/img]
[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值