编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Java,Barcode4J,条形码生成技术,条形码生成库,案例代码

wxchong 2024-08-09 11:31:39 开源技术 11 ℃ 0 评论

条形码

条形码,barcode,将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。

世界上常用的码制有:

EAN条形码、UPC条形码、25条形码、交叉25条形码、库德巴条形码、Code 39条形码和Code 128条形码等。

EAN条形码:

国际通用的符号体系,是一种长度固定、无含意的条形码,所表达的信息全部为数字,主要应用于商品标识 。

Code 39条形码和Code 128条形码:

目前国内企业内部的自定义码制,可以根据需要确定条形码的长度和信息,它编码的信息可以是数字,也可以包含字母,主要应用于工业生产线领域、图书管理等,如表示产品序列号、图书、文档编号等 [7] 。

代码案例

代码输出效果:

pom.xml

<!-- 条形码 -->
<dependency>
    <groupId>net.sf.barcode4j</groupId>
    <artifactId>barcode4j</artifactId>
    <version>2.1</version>
</dependency>

输出代码:

package com.what21.utils.code;

import org.apache.commons.lang.StringUtils;
import org.krysalis.barcode4j.impl.code128.EAN128Bean;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.impl.upcean.EAN13Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;

import java.awt.image.BufferedImage;
import java.io.*;

public class BarcodeUtils {

    /**
     * 生成到流(Code39)
     *
     * @param message
     * @param output
     */
    public static void generateWithCode39(String message, OutputStream output) {
        if (StringUtils.isEmpty(message) || output == null) {
            return;
        }
        Code39Bean bean = new Code39Bean();
        // 精细度
        final int dpi = 150;
        // module宽度
        final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
        // 配置对象
        bean.setModuleWidth(moduleWidth);
        bean.setWideFactor(3);
        bean.setBarHeight(5);
        // 白边显示
        bean.doQuietZone(false);
        String format = "image/png";
        try {
            // 输出到流
            BitmapCanvasProvider canvas = new BitmapCanvasProvider(output, format, dpi,
                    BufferedImage.TYPE_BYTE_BINARY, false, 0);
            // 生成条形码
            bean.generateBarcode(canvas, message);
            // 结束绘制
            canvas.finish();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 生成字节(Code39)
     *
     * @param message
     * @return
     */
    public static byte[] generateWithCode39(String message) {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        generateWithCode39(message, output);
        return output.toByteArray();
    }

    /**
     * 生成到流(Code128)
     *
     * @param message
     * @param output
     */
    public static void generateWithCode128(String message, OutputStream output) {
        if (StringUtils.isEmpty(message) || output == null) {
            return;
        }
        EAN128Bean bean = new EAN128Bean();
        // 精细度
        final int dpi = 150;
        // module宽度
        final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
        // 配置对象
        bean.setModuleWidth(moduleWidth);
        bean.setCodeset(7);
        // 高度
        bean.setBarHeight(5);
        // 白边显示
        bean.doQuietZone(true);
        String format = "image/png";
        try {
            // 输出到流
            BitmapCanvasProvider canvas = new BitmapCanvasProvider(output, format, dpi,
                    BufferedImage.TYPE_BYTE_BINARY, false, 0);
            // 生成条形码
            bean.generateBarcode(canvas, message);
            // 结束绘制
            canvas.finish();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 生成到流(EAN13)
     *
     * @param message
     * @param output
     */
    public static void generateWithEAN13(String message, OutputStream output) {
        if (StringUtils.isEmpty(message) || output == null) {
            return;
        }
        EAN13Bean bean = new EAN13Bean();
        // 精细度
        final int dpi = 150;
        // module宽度
        final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
        // 配置对象
        bean.setModuleWidth(moduleWidth);
        // 高度
        bean.setBarHeight(5);
        // 白边显示
        bean.doQuietZone(true);
        String format = "image/png";
        try {
            // 输出到流
            BitmapCanvasProvider canvas = new BitmapCanvasProvider(output, format, dpi,
                    BufferedImage.TYPE_BYTE_BINARY, false, 0);
            // 生成条形码
            bean.generateBarcode(canvas, message);
            // 结束绘制
            canvas.finish();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        try {
            String msg1 = "123456789012345";
            String path1 = "d://barcode1.png";
            generateWithCode39(msg1, new FileOutputStream(new File(path1)));
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        try {
            String msg2 = "123456789012345";
            String path2 = "d://barcode2.png";
            generateWithCode128(msg2, new FileOutputStream(new File(path2)));
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        try {
            String msg3 = "123456789012";
            String path3 = "d://barcode3.png";
            // Message must be 12 or 13 characters long
            generateWithEAN13(msg3, new FileOutputStream(new File(path3)));
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表