java 条形码生成类

正在开发的一个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
                   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);
       }
  return null;
    }

   
   
   
    protectedString determineFormat(HttpServletRequest request) {
       String format = request.getParameter(BARCODE_FORMAT);
       format = MimeTypes.expandFormat(format);
       if (format == null) format = MimeTypes.MIME_JPEG;
       return format;
    }

   
    protectedConfiguration buildCfg(HttpServletRequest request) {
       DefaultConfiguration cfg = newDefaultConfiguration("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);
       }

      
       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;
    }

 
 
}

 

以上很多参数的设置,我自己也不是很了解。如果需要的话。可以官网详细了解。

 

调用方式,直接在页面定义一张图片,而条形码的内容 可以自定义传入,也可以动态传入
      如果是自定义传入,图片中msg=22222就是生成的内容 type就是生成的规格(code39,Codabar等)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该工具为个人整理修改的常用工具,maven结构,Java语言编写详细依赖间pom文件,如有冲突自行修改, 包括条形码操作工具、二维码操作、图片验证码工具、动态密码工具、雪花算法id工具、签名工具、poi导出、json转换、文件操作、分页、日期处理、jdbc、大数运算及格式化、gzip压缩、http 结构说明如下: datasourceconfig:多数据源使用配置包 对数据源配置.txt:配置说明文件 function:功能代码及工具 delayqueue:java自带延迟对了使用包 DelayMsg:延迟消息实体 DelayMsgHandler:延迟消息处理工具 paramvalid:空参检查包 CommonUtil:空参检查工具 ParamNotNull:参数注解 RegistParam:参数实体 RequestMsg:公共参数实体 pdf:pdf导出工具包,包含4个导出工具,具体使用根据导出结果确定 websocket:服务端websockt配置包,比较简单,具体使用需自行扩充 ActiveMqUtil:ActiveMq操作工具 BarCodeUtil:条形码操作工具,包括生成和读取 CorsConfig:服务端防止跨域请求公共设置 DateUtil:时间处理工具 DBConnection:jdbc工具 FileOperater:文件处理工具 包括 读取文本文件,写出文本文件, 大文件切分,文件下载,文件或文件夹比较,文件或文件夹遍历筛选 ...... HttpClientCard:http工具 HttpUtil:http工具 Identification:id生成工具,包括 UUID luhn算法id(适用于有序的流水号码) ImgUtil:图片相似度计算工具 ItvJsonUtil:基于fastjson的json工具 JsonUtility:基于jackjson的接送工具 MailUtil:邮件工具,包括发送纯文本邮件,带(1个/多个)附件的邮件, 群发邮件 NumberUtil:数字操作工具 包括精准数字运算,数据格式化 PageUtil:分页工具, POIUtil:poi工具,excel导出 QrCodeUtil:二维码操作工具, 包括生成和读取 ShellUtil:shell命令操作工具,包括linux登陆,命令执行...... 较为简单,具体需要自行扩充 SignUtil:签名工具,包括MD5 位运算 AES BASE64 SnowflakeIdWorker:ID生成工具 雪花算法 SocketUtil:socket测试工具 TotpAuthUtil:动态密码工具 包括生成和校验 VerifyCodeUtil:图片验证码生成工具 ZipUtils:gzip压缩工具

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值