java 条形码_用java制作条形码

packagecom.titansoft.chznkg.storage.barcode.util;importjava.awt.Color;importjava.awt.Font;importjava.awt.FontMetrics;importjava.awt.Graphics;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStream;importorg.jbarcode.JBarcode;importorg.jbarcode.JBarcodeFactory;importorg.jbarcode.encode.Code128Encoder;importorg.jbarcode.encode.InvalidAtributeException;importorg.jbarcode.paint.TextPainter;importorg.jbarcode.util.ImageUtil;/***@class:JbarcodeUtil

*@descript:生成条形码最标准

*备注:

*1.静态代码块的作用:当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。

*2.常量条形码的高度和字体大小设置很重要,若是设置小了会看不到设置的文件*/

public classBarcodeUtils {//设置条形码高度

private static final int BARCODE_HEIGHT = 20;//设置条形码默认分辨率

private static final int BARCODE_DPI =ImageUtil.DEFAULT_DPI;//设置条形码字体样式

private static final String FONT_FAMILY = "console";//设置条形码字体大小

private static final int FONT_SIZE = 12;//设置条形码文本

public static String TEXT = "";//创建jbarcode

private static JBarcode jbc = null;static JBarcode getJBarcode() throwsInvalidAtributeException {/*** 参考设置样式:

*barcode.setEncoder(Code128Encoder.getInstance()); //设置编码

*barcode.setPainter(WidthCodedPainter.getInstance());// 设置Painter

*barcode.setTextPainter(BaseLineTextPainter.getInstance()); //设置TextPainter

*barcode.setBarHeight(17); //设置高度

*barcode.setWideRatio(Double.valueOf(30).doubleValue());// 设置宽度比率

*barcode.setXDimension(Double.valueOf(2).doubleValue()); // 设置尺寸,大小 密集程度

*barcode.setShowText(true); //是否显示文本

*barcode.setCheckDigit(true); //是否检查数字

*barcode.setShowCheckDigit(false); //是否显示检查数字*/

if (jbc == null) {//生成code128

jbc =JBarcodeFactory.getInstance().createCode128();

jbc.setEncoder(Code128Encoder.getInstance());

jbc.setTextPainter(CustomTextPainter.getInstance());

jbc.setBarHeight(BARCODE_HEIGHT);

jbc.setXDimension(Double.valueOf(0.8).doubleValue());

jbc.setShowText(true);

}returnjbc;

}/*** @descript:生成条形码文件

*@parammessage 条形码内容

*@paramfile 生成文件*/

public static voidcreateBarcode(String message, File file,String text) {try{

FileOutputStream fos= newFileOutputStream(file);

createBarcode(message, fos,text);

fos.close();

}catch(IOException e) {throw newRuntimeException(e);

}

}/*** @descript:生成条形码并写入指定输出流

*@parammessage 条形码内容

*@paramos 输出流*/

public static voidcreateBarcode(String message, OutputStream os,String text) {try{//设置条形码文本

TEXT=text;//创建条形码的BufferedImage图像

BufferedImage image =getJBarcode().createBarcode(message);

ImageUtil.encodeAndWrite(image, ImageUtil.PNG, os, BARCODE_DPI, BARCODE_DPI);

System.out.println(image) ;

os.flush();

}catch(Exception e) {throw newRuntimeException(e);

}

}/*** 静态内部类

* 自定义的 TextPainter, 允许定义字体,大小,文本等

* 参考底层实现:BaseLineTextPainter.getInstance()*/

protected static class CustomTextPainter implementsTextPainter {private static CustomTextPainter instance =newCustomTextPainter();public staticCustomTextPainter getInstance() {returninstance;

}public void paintText(BufferedImage barCodeImage, String text, intwidth) {//绘图

Graphics g2d =barCodeImage.getGraphics();//创建字体

Font font = new Font(FONT_FAMILY, Font.PLAIN, FONT_SIZE *width);

g2d.setFont(font);

FontMetrics fm=g2d.getFontMetrics();int height =fm.getHeight();int center = (barCodeImage.getWidth() - fm.stringWidth(text)) / 2;

g2d.setColor(Color.WHITE);

g2d.fillRect(0, 0, barCodeImage.getWidth(), barCodeImage.getHeight() * 1 / 20);

g2d.fillRect(0, barCodeImage.getHeight() - (height * 9 / 10), barCodeImage.getWidth(), (height * 9 / 10));

g2d.setColor(Color.BLACK);//绘制文本

g2d.drawString(TEXT, 0, 140);//绘制条形码

g2d.drawString(text, center, barCodeImage.getHeight() - (height / 10) - 2);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值