`
EJB_wawa
  • 浏览: 109037 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

(转别人的)条形码

阅读更多
转自www.alibubu.com
本周主题 -- 条形码制作- barbecue 及 krysalis-barcode
SECTION 00 简介

记得我在大学的时候, 去大众计算机实习工读, 那 时候在工业管理部门, 那时候我仅是呆呆笨笨的学生, 他们跟我说要我学 习 clipper 去印制条形码, 朦胧无知的我就乖乖地学习 clipper 艰深难懂完全 没有对象导向的语法, 不过, 当我出了社会, 协助一家 ec 网站建立 7-11 的整套系统, 那时候, 我采用了 asp 通过 activx 的组件产生 barcode. 最近刚好有人在 jsptw 问起 barcode 的产生, 我又回想当时制作的方式, 不由得好奇 java 是否 有相关的 opensource 可以使用, 在 sourceforge 上有存在着 barbecue 这个项目, Jiayun 大侠也提供了 krysalis barcode 这个 opensource 给我知道. 因此, 本周就介绍如何制作 Barcode .

SECTION 01 Barbecue



#BSD License# , 目前版本 1.0.6 RC1, 由此下载 binary/source 文件

Barbecue 这个 opensource 项目使用 java 制作了 一些 barcode 的格式, 只需要通过简单又具有弹性的 java api 就可以使 用了. 他输出的格式为图片文件, 也可以使用在 Swing 之 中, 更可以输出成为 SVG 的格式.

使用 Barbecue 这个项目非常简单, 当你下载他的 binary 文件解压缩后, 你会找到一个 barbecue.war文件, 你把它放到 %TOMCAT_HOME%/webapps/ 之下, 接着你可以直接执行 http://localhost:8080/barbecue/barcode?data=123545&height=50, 你就可以看到


这样的 barcode 图片了 ( 此图片为1.0.5输出, 1.0.6 RC1有点 bug, 无法输出文字部分 ). 如果你要在其它的 jsp 使用的话, 你可以用 <img src="http://localhost:8080/barbecue/barcode?data=123545&height=50" >, 他就会内嵌在你的网页之中.

SECTION 02 barbecue 参数解释

我们可以 trace 一下 barbecue.war 的 web.xml 是怎么设置的
<?xml version="1.0"

encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
    <servlet>
        <servlet-name>barbecue</servlet-name>
                <display-name>Barbecue</display-name>
                <deSCRIPTion>Barcode

generating servlet (serves images)</deSCRIPTion>
        <servlet-class>net.sourceforge.barbecue.BarcodeServlet</servlet-class>
                <load-on-startup>1</load-on-startup>
    </servlet>
        <servlet-mapping>
                <servlet-name>barbecue</servlet-name>
                <url-pattern>*</url-pattern>
        </servlet-mapping>
</web-app>

他使用一个叫做 net.sourceforge.barbecue.BarcodeServlet 的程序接收传入的参数, 可以接收以下这几种参数
data *: 这是必要项, 就是你 要对什么数值做 barcode 编码
type: 以下是支持的格式列表 , 请注意大小写, 默认为 Code128B
Code128
Code128A
Code128B
Code128C
EAN128
USPS
ShipmentIdentificationNumber
SSCC18
SCCC14ShippingCode
GlobalTradeItemNumber
UCC128
PDF417
Code39
3of9
USD3
Codabar
USD4
NW7
Monarch
2of7
appId: 只有 UCC128 格式需 要.
width: 最小的 bar 宽度 pixels.
height: 输出的图片高度 pixels.
resolution: 输出的图片分辨 率 dpi.
drawText: 默认为 true, 当 设为 false 时将不会同时绘出文字, 但是有些 type 即使设为 true 也不会绘出文字. (1.0.6RC1 此处有bug)
drawText: 默认为 false, 当 设为 true 时将增加一个检查码, 只有 Code39 格式有用.

SECTION 03 在 swing 中使用 barbecue

我们如果要在 swing 中使用, 范例程序如下, 因为 barcode 本身就 是 JComponent, 所以可以直接 add();
import javax.swing.*;
import net.sourceforge.barbecue.BarcodeFactory;
import net.sourceforge.barbecue.Barcode;
import

net.sourceforge.barbecue.BarcodeException;
import

net.sourceforge.barbecue.BarcodeImageHandler;

import java.awt.image.BufferedImage;
import java.awt.*;
import java.awt.event.*;
import java.io.FileOutputStream;
import java.io.IOException;

public class

SwingApplication {

    public static

void main(String[]

args) {
        //Create the top-level container and add contents to it.
        JFrame frame = new JFrame("SwingApplication");
        SwingApplication app = new SwingApplication();

                Component contents = app.usingBarbecueAsSwingComponent();

        frame.getContentPane().add(contents, BorderLayout.CENTER);

        //Finish setting up the frame, and show it.
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        frame.pack();
        frame.setVisible(true);
    }

        public Component usingBarbecueAsSwingComponent() {

                //

Always get a Barcode from the BarcodeFactory
        Barcode barcode = null;
        try {
            barcode = BarcodeFactory.createCode128B("12345");
        } catch

(BarcodeException e) {
            //

Error handling
        }

                return barcode;
        }
}

执行的结果是.



SECTION 04 krysalis 的 barcode



#ASF License# , 目前版本 0.9, 由此下载 binary/source 文件

相同的, krysalis barcode 也有提供一个 krysalis-barcode.war, 你可以直接 deploy 到 %Tomcat_HOME%/webapps 之 下, 直接 http://localhost:8080/krysalis-barcode 就可以看到执行的页面了, krysalis barcode 主要输出 SVG 图片文件格式为 主, 如果没有安装过 SVG 的使用者, 可以到 adobe 的 网站下载 SVG Viewer 3.0.1 . 当我输入, type=code128, msg=12345, height=2.5cm, mw=0.5mm, wf=2, qz=10mw, hrp=bottom 的画面如下




SECTION 05 krysalis barcode 的使用

也是相同的观念, 使用了一个 org.krysalis.barcode.servlet.BarcodeServlet 作为接值及呈现的处理.
<?xml version="1.0"

encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
  <servlet>
    <servlet-name>BarcodeServlet</servlet-name>
    <servlet-class>org.krysalis.barcode.servlet.BarcodeServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>BarcodeErrorServlet</servlet-name>
    <servlet-class>org.krysalis.barcode.servlet.BarcodeErrorServlet<

SPAN CLASS="syntax17"></servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>BarcodeServlet</servlet-name>
    <url-pattern>/gensvg</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>BarcodeErrorServlet</servlet-name>
    <url-pattern>/errsvg</url-pattern>
  </servlet-mapping>
  <mime-mapping>
    <extension>xhtml</extension>
    <!--mime-type>application/xhtml+xml</mime-type-->
    <!--the above is

not supported by IE6-->
    <mime-type>text/html</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>svg</extension>
    <mime-type>image/svg+xml</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>svgz</extension>
    <mime-type>image/svg+xml</mime-type>
  </mime-mapping>
  <error-page>
    <exception-type>org.krysalis.barcode.BarcodeException</exception-type>
    <location>/errsvg</location>
  </error-page>
</web-app>

目前支持的 type 有以下几种
Interleaved 2 of 5
Code 39
Codabar
Code 128
UPC-A
UPC-E
EAN-13
EAN-8

SECTION 06 krysalis barcode 输出的 SVG 文件

当我们执行 gensvg?type=code128&msg=12345&height=2.5cm&mw=0.5mm&wf=2&qz=10mw&hrp=bottom 他会产生一个 svg 文件. 文件内容就是 XML 文件. 内容如下..
<?xml version="1.0"

standalone="no"?>
<!DOCTYPE svg>
<svg
        height="25mm"
        width="49.5mm"
        preserveAspectRatio="xMidYMid meet"
        xmlns:xmlns="http://www.w3.org/2000/svg"
zoomAndPan="magnify">
<g style="fill:black; stroke:none">
        <rect height="22.1781mm" width="1mm" x="5mm" y="0mm"/>
        <rect height="22.1781mm" width="0.5mm" x="6.5mm" y="0mm"/>
        <rect height="22.1781mm" width="1.5mm" x="8mm" y="0mm"/>
        <rect height="22.1781mm" width="0.5mm" x="10.5mm" y="0mm"/>
        <rect height="22.1781mm" width="1mm" x="11.5mm" y="0mm"/>
        <rect height="22.1781mm" width="1.5mm" x="13.5mm" y="0mm"/>
        <rect height="22.1781mm" width="0.5mm" x="16mm" y="0mm"/>
        <rect height="22.1781mm" width="0.5mm" x="18mm" y="0mm"/>
        <rect height="22.1781mm" width="1mm" x="19mm" y="0mm"/>
        <rect height="22.1781mm" width="0.5mm" x="21.5mm" y="0mm"/>
        <rect height="22.1781mm" width="2mm" x="22.5mm" y="0mm"/>
        <rect height="22.1781mm" width="1.5mm" x="25mm" y="0mm"/>
        <rect height="22.1781mm" width="1mm" x="27mm" y="0mm"/>
        <rect height="22.1781mm" width="1.5mm" x="28.5mm" y="0mm"/>
        <rect height="22.1781mm" width="0.5mm" x="31mm" y="0mm"/>
        <rect height="22.1781mm" width="1.5mm" x="32.5mm" y="0mm"/>
        <rect height="22.1781mm" width="0.5mm" x="34.5mm" y="0mm"/>
        <rect height="22.1781mm" width="1mm" x="35.5mm" y="0mm"/>
        <rect height="22.1781mm" width="1mm" x="38mm" y="0mm"/>
        <rect height="22.1781mm" width="1.5mm" x="40.5mm" y="0mm"/>
        <rect height="22.1781mm" width="0.5mm" x="42.5mm" y="0mm"/>
        <rect height="22.1781mm" width="1mm" x="43.5mm" y="0mm"/>
        <text
          style="font-family:Helvetica;

font-size:8.0pt;

text-anchor:middle"
          x="24.75mm"
          y="24.4356mm"
          startOffset="0" >
                12345
        </text>
</g>
</svg>

SECTION 07 结论

目前我们所见到的都是属于一维条形码, 未来希望能够看到二维甚至多维条形码的制作或是 其它 opensource 能够出现. 当然, 如果你们有特别制作特殊的条形码格式, 或 是有一些比较冷僻的条形码标准不在这两个项目中, 希望你能够加入他们的开发工程.. 感谢这么多愿意默默付出的工程师们, 相较之下, 自己非常的渺小
分享到:
评论

相关推荐

    基于UniApp的二维码条形码生成.zip

    - 保护用户隐私,不建议直接将敏感信息编码成二维码或条形码供他人扫描。 综上所述,基于UniApp的二维码和条形码生成涉及了跨平台开发、第三方库的集成、API的调用等多个技术环节,通过学习和实践,开发者可以轻松...

    在线生成条形码_barcode.zip

    6. **安全性与合法性**:对于商业用途,确保生成的条形码不侵犯他人版权,如果是商品条形码,还需要注册并获得授权。在线生成器通常不会涉及这些问题,但用户应了解相关法规。 7. **性能与效率**:高质量的在线条形...

    微信小程序,支付宝小程序条形码,二维码qrcode-master.zip

    而条形码和二维码作为数据交换和识别的重要工具,在零售、物流、广告等领域广泛应用。"qrcode-master.zip"这个压缩包文件显然与生成和处理这些图形化代码有关,它可能包含了一套完整的QRCode(二维码)生成器库,...

    基于VB的128位二维条形码生成工具附源码

    【标题】"基于VB的128位二维条形码生成工具附源码"涉及到的主要知识点包括:Visual Basic(VB)编程语言、128位条形码编码、二维条形码技术以及源码学习与分析。 Visual Basic,简称VB,是微软公司推出的一种面向...

    二维条码生成插件 (Chrome)

    常见的二维条码类型有QR码(Quick Response Code)、PDF417和DataMatrix等。这款Chrome插件默认将当前网页的URL转换为二维条码,使得用户可以通过手机或其他设备上的扫描软件快速访问该页面,极大地简化了信息获取...

    MATLAB条形码识别GUI版.zip

    标题中的“MATLAB条形码识别GUI版.zip”表明这是一个基于MATLAB的图形用户界面(GUI)应用程序,用于条形码识别。MATLAB是一种强大的编程环境,尤其在数学计算、图像处理和信号处理方面有着广泛的应用。条形码识别则...

    使用JNative对条码打印机进行打印(转别人)

    在本例中,任务是通过Java调用Godex EZ2300条码打印机的驱动程序Ez2000.dll。为了实现这一点,开发者选择使用JNative库,它是一个Java Native Interface (JNI)的封装工具,简化了Java与本地代码交互的过程。 ...

    二维码图片转矢量3.0.zip

    1. **二维码基础知识**:二维码(Quick Response Code)是一种二维条形码,可以存储更多的信息,如网址、文本、联系人信息等。它们在移动设备上广泛使用,通过扫描即可快速访问相关信息。 2. **位图与矢量图**:...

    zfb扫码转卡,二维码生成-易语言.zip

    二维码(Quick Response Code)是二维条形码的一种,能够存储比传统条形码更多的信息,如文本、URL、联系人信息等。在“扫码转卡”项目中,二维码被用来作为转账指令的载体。生成二维码的过程通常涉及到以下步骤: ...

    zfb扫码转卡,二维码生成-易语言1.zip

    二维码(Quick Response Code)是二维条形码的一种,能够存储比传统条形码更多的信息,如文本、URL、联系人信息等。在“扫码转卡”项目中,二维码被用来作为转账指令的载体。生成二维码的过程通常涉及到以下步骤: ...

    zfb扫码转卡,二维码生成-易语言

    二维码(Quick Response Code)是二维条形码的一种,能够存储比传统条形码更多的信息,如文本、URL、联系人信息等。在“扫码转卡”项目中,二维码被用来作为转账指令的载体。生成二维码的过程通常涉及到以下步骤: ...

    LS2208使用说明书

    1. **高精度扫描**:LS2208配备有高性能扫描引擎,可快速识别多种条形码格式,即使是在低光环境下或条形码受损的情况下也能保持高精度读取。 2. **人体工程学设计**:扫描器采用人体工学设计,握感舒适,减轻了长...

    Zxing二维码图片和文字转换

    它支持多种类型的条码和二维码,包括QR码、Data Matrix、UPC和EAN等。Zxing提供了从图像中检测和解码条码的能力,使得在Java、Android以及其他多种编程语言中实现二维码和条码的读取变得简单易行。 在这个项目中,...

    二维码——QR码编码软件

    二维码,特别是QR码,是一种广泛应用于现代生活中的二维条形码技术。QR码,全称为“Quick Response”码,由日本电装(DENSO)公司于1994年开发,设计初衷是为了在汽车制造行业中实现更高效的数据追踪。随着时间的...

    zxingLibrary.zip

    ZXing(Zebra Crossing)库,也被称为条形码扫描库,是一个开源项目,用于读取、生成多种一维和二维条形码格式,包括二维码。这个"zxingLibrary.zip"压缩包包含了ZXing库的相关资源,使得开发者可以快速集成到自己的...

    ramsaver8 中文版

    以下只是在窗体上生成一个code39码,生成的code39码已被条码阅读器识别。 我现在想知道生成后的条码怎么样被打印出来,用什么方法,是转换成图形还是在报表中 直接画出?当条码的宽度为定长时,可调节线的粗细打印,...

    zxing 生成二维码名片

    它支持多种条形码格式,如QR Code、Code 128、EAN-13等,并且可以跨平台运行在Java、Android、iOS以及Web环境中。ZXing提供了一个强大的框架,使开发者能够轻松地将条码处理功能集成到自己的应用程序中。 生成...

    二维码个人名片(含源码)

    ZXing是一个开源的、多平台的条形码和二维码解码库,它支持多种格式,包括QR码、Data Matrix、Aztec以及UPC和EAN等一维条形码。 首先,我们需要理解二维码的工作原理。二维码是一种二维条形码,能够存储比传统一维...

    二维码图片生成器

    二维码图片生成器是一种实用工具,它能够将各种信息编码成二维条形码,即二维码,然后将这些二维码以图像的形式展现出来。这种技术在现代社会中广泛应用,如产品标识、网址链接、电子名片、支付信息等。下面我们将...

    二维码工具

    二维码工具是一种便捷的信息编码与解码工具,它利用二维条形码技术,将各种类型的数据,如文字、数字、网址、联系人信息等,转化为可快速扫描的图形。这款特定的软件版本是"PsQREdit 2.4.3 - Chinese.exe",专为中文...

Global site tag (gtag.js) - Google Analytics