正在开发的一个j2ee的项目项目中需要使用到生成条形码 这里用了Barcode4J作为条形码生成,官网地址是http://barcode4j.sourceforge.net/ 里面有很详细的介绍。本人只是项目使用。所以就不介绍了。
首先下载barcode4j-2.0-bin.zip和barcode4j-2.0-src.zip 由于里面提供的例子是用servlet使用的。而我项目是用的 是struts,所以更改了下源代码换成action。
以下代码中。createBarcode()方法是最主要的action方法,提供给用户调用。
一下就是一个生成条形码的action类。
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
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;
importorg.apache.avalon.framework.configuration.Configuration;
importorg.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;
importorg.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;
public class BarcodeAction extends BaseAction {
private static final long serialVersionUID =-134361457426852420L;
publicstatic final StringBARCODE_MSG = "msg";
publicstatic final StringBARCODE_TYPE = "type";
publicstatic final StringBARCODE_HEIGHT = "height";
publicstatic final StringBARCODE_MODULE_WIDTH = "mw";
publicstatic final StringBARCODE_WIDE_FACTOR = "wf";
publicstatic final StringBARCODE_QUIET_ZONE = "qz";
publicstatic final String BARCODE_HUMAN_READABLE_POS ="hrp";
publicstatic final StringBARCODE_FORMAT = "fmt";
publicstatic final StringBARCODE_IMAGE_RESOLUTION = "res";
publicstatic final StringBARCODE_IMAGE_GRAYSCALE = "gray";
publicstatic final String BARCODE_HUMAN_READABLE_SIZE = "hrsize";
publicstatic final String BARCODE_HUMAN_READABLE_FONT = "hrfont";
publicstatic final String BARCODE_HUMAN_READABLE_PATTERN ="hrpattern";
privatetransient Logger log = newConsoleLogger(ConsoleLogger.LEVEL_INFO);
public String createBarcode() throwsServletException{
try {
String format = determineFormat(request);
int orientation = 0;
Configuration cfg = buildCfg(request);
String msg = request.getParameter(BARCODE_MSG);
if (msg == null) msg = "0123456789";
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 = newjavax.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