`
猪↘專屬|华
  • 浏览: 164057 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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 com.util;
/*
 * 作者:朱湘鄂
 * 目的:达到实现条形码的效果
 * 日期:2010-05-24
 */
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.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;

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;

/**
 * Simple barcode servlet.
 *
 * @version $Id: BarcodeServlet.java,v 1.7 2008/03/04 20:07:23 jmaerki Exp $
 */
public class BarcodeServlet extends HttpServlet {

    /** 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 transient 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 = "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 = 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中的配置为:

  <!-- 条形码的servlet映射和路径 -->
  <servlet> 
<servlet-name>BarcodeServlet</servlet-name> 
<servlet-class>com.util.BarcodeServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
<servlet-name>BarcodeServlet</servlet-name> 
<url-pattern>/barcode</url-pattern> 
</servlet-mapping>

 

页面的访问:

<%@ 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>zhuzhu</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">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
 
  <body>
    <img src="<%=request.getContextPath() %>/barcode?msg=12345678" height="50px" width=130px/> 
  </body>
</html>
实现的效果图为:

0
1
分享到:
评论

相关推荐

    Java实现条形码打印

    目前比较通用的用Java实现条形码打印的集成插件主要有:barbecue和barcode4j. 但是用barbecue,条形码可以显示出来,可是下面对应数字却不能显示出来,当然可以自己手动加上去,不过那就不是一张图片里面的了,并且...

    java实现条形码二维码生成含文字标签信息

    本篇将深入探讨如何使用Java结合ZXing库来生成包含文字标签信息的条形码和二维码。 ZXing,全称为“Zebra Crossing”,是一个开源的、跨平台的条码读取和生成项目。它支持多种条码格式,包括一维条形码(如EAN-13、...

    java实现条形码编程,完整项目

    Java 实现条形码编程是一项常见的任务,尤其在自动化数据处理、库存管理、物流跟踪等领域。这个项目提供了完整的实现,确保能够正确运行并经过测试,为有相关需求的用户提供了一个可靠的解决方案。 首先,我们需要...

    JAVA实现条形码架包

    "JAVA实现条形码架包" 是一个专为Java开发者设计的库,它提供了生成和解析各种类型条形码的能力。这个包的核心组件是`JBarcodeBean`,它是一个基于Java的条形码生成工具,能够帮助开发者在应用程序中集成条形码功能...

    java实现zebra打印条形码

    本篇将详细介绍如何使用Java编程语言来实现与Zebra打印机进行交互,从而打印条形码。 首先,我们需要了解Zebra的通用打印机命令语言(ZPL)或EPL,这是Zebra打印机理解和执行打印任务的语言。ZPL是一种基于文本的...

    Java实现条形码、二维码所需Jar包。

    总的来说,Java实现条形码和二维码的功能主要依赖于第三方库,如QRCode.jar 和 jbarcode-0.2.8.jar。这些库提供了一系列的API,使得开发者能够快速、高效地在Java应用中生成和解析条形码及二维码,从而满足各种数据...

    Zxing java识别条形码例子

    本篇文章将深入讲解如何使用Java和Zxing库来实现条形码的识别。 首先,我们需要在项目中引入Zxing库。如果你的项目是Maven工程,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;com.google.zxing&lt;/groupId&gt;...

    java条形码识别

    Java条形码识别技术主要涉及的是对一维和二维条形码进行解码的过程,它在物流、零售、仓储管理等领域广泛...结合`Barcode.java`的源代码,你可以更好地理解如何在实践中使用ZXing,从而实现你自己的条形码识别系统。

    Java三种生成条形码的源码(barcode4j、jbarcode、google-zxing)

    在Java编程环境中,生成条形码是一项常见的需求,特别是在数据管理、库存跟踪和产品标识等领域。以下是关于使用Java生成条形码的三个主要方法的详细解释:barcode4j、jbarcode和google-zxing。 1. **barcode4j**: ...

    用java一维码批量生成(条码)图片

    ZXing是一个开源项目,提供了多种条码和二维码的读写功能,而Barbecue则专注于生成条形码。在这里,我们假设你已经选择了适合的库,并正确地将其引入到你的Java项目中。 一、ZXing(Zebra Crossing)库的使用 1. ...

    Java打印条形码.txt

    ### Java打印条形码知识点详解 ...本文详细介绍了如何使用Java实现条形码的打印功能,包括前端页面的设计与交互、后端逻辑处理以及条形码图像的生成与打印。通过这种方式,可以有效地提高业务流程中的效率和准确性。

    java条形码

    2. **Java实现条形码** - 在Java中,可以使用开源库如`barcode4j`、`ZXing`(Zebra Crossing)或者`Java Barcode API`等来生成BarCode 39条形码。 - `barcode4j`是一个基于XML的、可扩展的条形码生成库,可以生成...

    java生成条形码的Demo

    Java生成条形码的Demo是一种在Java环境中实现条形码生成的应用示例。条形码在各种领域,如零售、物流、库存管理等,都扮演着重要的角色,它能够快速准确地识别商品信息。本Demo旨在帮助开发者了解如何在Java项目中...

    java生成条形码

    本文将详细介绍如何利用Java生成条形码,包括必要的参数配置以及代码实现。 #### 知识点一:Java条形码生成概述 条形码是一种图形表示方式,用于编码信息,通常是数字或字母。Java条形码生成通常涉及到以下步骤: ...

    JAVA调用zpl条码打印机打印中文打印及网络打印实例

    ZPL是一种专门用于配置和控制Zebra品牌的条码打印机的语言,它允许开发者创建自定义的标签、条形码、二维码等。对于中文打印,ZPL提供了特殊的支持,因为中文字符通常不是单字节的ASCII字符,而是多字节的Unicode...

    Java 生成条码 保存在pdf上例子(亲测)

    在本示例中,我们将探讨如何使用Java实现这一功能,并涉及如何添加水印以增强PDF的安全性和标识性。 首先,我们需要引入能够处理条码和PDF的库。一个常用的库是` ZXing (Zebra Crossing)`,它是一个开源的条码读取...

    java实现二维条码源代码

    总的来说,Java实现二维条码源代码的项目提供了一个方便的工具,让开发者能够轻松地在他们的应用程序中集成条码生成功能。无论是为了简化数据录入,还是为了增加交互性,理解并掌握这些知识点对于Java开发者来说都是...

    条形码打印( java )

    Java作为广泛应用的编程语言,提供了丰富的库和API来实现条形码的生成与打印。本项目名为“条形码打印(java)”,显然是一个基于Java的条形码生成解决方案,且支持Web环境,意味着我们可以在线生成并打印条形码。 ...

Global site tag (gtag.js) - Google Analytics