JBarcode生成条形码(带汉字);请注意Maven里面现在没有这个jar包的依赖,需要自己下载,并手动导入Maven


import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;import org.jbarcode.JBarcode;
import org.jbarcode.JBarcodeFactory;
import org.jbarcode.encode.Code128Encoder;
import org.jbarcode.encode.InvalidAtributeException;
import org.jbarcode.paint.TextPainter;
import org.jbarcode.util.ImageUtil;public class JBarcodeUtil {// 设置条形码高度private static final int BARCODE_HEIGHT = 50;// 设置条形码默认分辨率//private static final int BARCODE_DPI = ImageUtil.DEFAULT_DPI;private static final int BARCODE_DPI = ImageUtil.DEFAULT_DPI;// 设置条形码字体样式//private static final String FONT_FAMILY = "微软雅黑";//private static final String FONT_FAMILY = "STXihei";private static final String FONT_FAMILY = "Microsoft YaHei";// 设置条形码字体大小private static final int FONT_SIZE = 14;// 设置条形码文本/*public static String TEXTONE = "";public static String TEXTTWO = "";public static String TEXTTHREE = "";*/public static String TEXT = "";// 创建jbarcodeprivate static JBarcode jbc = null;/*** 1.静态代码块的作用:当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。  * 2.常量条形码的高度和字体大小设置很重要,若是设置小了会看不到设置的文件 * @return* @throws InvalidAtributeException*/static JBarcode getJBarcode() throws InvalidAtributeException {/*** 参考设置样式:* 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) {//  生成code128jbc = JBarcodeFactory.getInstance().createCode128();jbc.setEncoder(Code128Encoder.getInstance());//   设置TextPainterjbc.setTextPainter(CustomTextPainter.getInstance());// 设置设置条形码高度jbc.setBarHeight(BARCODE_HEIGHT);//    设置尺寸,大小 密集程度jbc.setXDimension(Double.valueOf(0.8).doubleValue());//  是否显示文本 jbc.setShowText(true);}return jbc;}/*** @descript:      生成条形码文件(调用此方法进行生成工作)* @param message 显示的文字内容* @param file       生成文件地址* @param content 条形码内容* @return */public static String createBarcode(String message, File file, String content) {try {FileOutputStream fos = new FileOutputStream(file);createBarcode(message, fos, content);fos.close();} catch (IOException e) {throw new RuntimeException(e);}return "scuccs";}/*** @descript:       生成条形码并写入指定输出流* @param message  条形码内容* @param os       输出流* @param text       文字内容*/private static void createBarcode(String message, OutputStream os, String text) {try {/*String[]  strs = text.split("-");// 设置条形码文本switch(strs.length){case 1:TEXTONE = strs[0].toString();TEXTTWO = "";TEXTTHREE = "";break;case 2:TEXTONE = strs[0].toString();TEXTTWO = strs[1].toString();TEXTTHREE = "";break;default:TEXTONE = strs[0].toString();TEXTTWO = strs[1].toString();TEXTTHREE = strs[2].toString();break;}*/int lenght = message.length();String zero = "";for (int i = lenght; i < 7; i++) {zero += "0";}message = zero + message;TEXT = text;// 创建条形码的BufferedImage图像BufferedImage image = getJBarcode().createBarcode(message);/*int a = image.getWidth();int b = image.getHeight();System.out.println("生成的图片:宽为"+a+"、高为"+b);*/ImageUtil.encodeAndWrite(image, ImageUtil.PNG, os, BARCODE_DPI, BARCODE_DPI);os.flush();} catch (Exception e) {throw new RuntimeException(e);}}/*** 静态内部类 自定义的 TextPainter, 允许定义字体,大小,文本等* 参考底层实现:BaseLineTextPainter.getInstance()*/private static class CustomTextPainter implements TextPainter {private static CustomTextPainter instance = new CustomTextPainter();public static CustomTextPainter getInstance() {return instance;}public void paintText(BufferedImage barCodeImage, String text, int width) {// 绘图Graphics g2d = barCodeImage.getGraphics();// 创建字体Font font = new Font(FONT_FAMILY, Font.PLAIN, FONT_SIZE * width);g2d.setFont(font);//g2d.drawRect(0, 0, 500, 500);FontMetrics fm = g2d.getFontMetrics();//    高度int height = fm.getHeight();//   中心  这里的text是指的条形码数字int center = (barCodeImage.getWidth() - fm.stringWidth(text)) / 2 + 10;/*int a = (barCodeImage.getWidth() - fm.stringWidth(TEXTONE)) / 2;int b = (barCodeImage.getWidth() - fm.stringWidth(TEXTTWO)) / 2;int c = (barCodeImage.getWidth() - fm.stringWidth(TEXTTHREE)) / 2;*/int d = (barCodeImage.getWidth() - fm.stringWidth(TEXT)) / 2;//   条形内容上下的颜色g2d.setColor(Color.WHITE);//   条形码-----码的上部//g2d.fillRect(0, 0, barCodeImage.getWidth(), barCodeImage.getHeight() * 1 / 20);g2d.fillRect(0, 0, barCodeImage.getWidth(), barCodeImage.getHeight() * 7 / 20);//  条形码-----码的底部g2d.fillRect(0, barCodeImage.getHeight() - (height * 9 / 10), barCodeImage.getWidth(), (height * 9 / 10));//    显示的字体颜色(包括条形码下方的数字)g2d.setColor(Color.BLACK);//   绘制文本/*g2d.drawString(TEXTONE, a, 145);g2d.drawString(TEXTTWO, b, 170);g2d.drawString(TEXTTHREE, c, 195);*/g2d.drawString(TEXT, d, 30);//    绘制安保或者涉案字样g2d.drawString("SA", 16, 55);// 绘制条形码的数字内容//g2d.drawString(text, center, barCodeImage.getHeight() - (height / 10) - 2);//在最下面g2d.drawString(text, center, 55);//在中间}}public static void main(String[] args) {BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(50);ThreadPoolExecutor executor = new ThreadPoolExecutor(8, 8, 1, TimeUnit.DAYS, queue);Long data = new Date().getTime();String datas = data.toString();List<File> fileList = new ArrayList<File>();// 存放地址File newImagepath = new File("d:/" + datas + ".jpg");fileList.add(newImagepath);// 生成条形码的内容String content = "6";// 显示在条形码上的文字String text = "第04箱";try {if (executor.getQueue().size() > 30) {Thread.sleep(200);}// 生成条形码的方法MultithreadForBarCod barCode = new MultithreadForBarCod();barCode.setMessage(content);barCode.setFile(newImagepath);barCode.setText(text);executor.execute(barCode);Thread.sleep(20);} catch (Exception e) {System.out.println(e.getMessage());e.printStackTrace();try {Thread.sleep(500);} catch (InterruptedException e1) {e1.printStackTrace();}}executor.shutdown();}}

JBarcode生成条形码(带汉字)相关推荐

  1. 项目中用jbarcode生成条形码,并进行特定的格式打印标签纸(完成步骤):(得力,斑马打印机都能使

    项目完成的功能如下:扫描加密的条形码,进行解密,打印出正确的文字信息以及二维码的内容,并生成新的条形码(个数可以控制):图片如下: (1)下载jbarcode-0.2.8.jar,copy到/lib/ ...

  2. java使用jbarcode生成条形码

    准备工作: 开发工具:eclipse4.5+jdk1.7 所需jar包:jbarcode-0.2.8.jar 案例: package jbarcode; import java.awt.Color; ...

  3. java用JBarcode组件生成条形码(支持自定义字体及颜色)

    前言: JBarcode入门教程我就不写了,可以参考:点击打开链接 我的这篇教程和上篇博客的不同之处: 1 上篇博客直接生成二维码图片放到d盘的某个文件夹下,我的二维码生成二维码后直接用Base64编 ...

  4. java用JBarcode组件生成条形码(支持自定义字体及颜色),图文详解之2-1

    前言: JBarcode入门教程我就不写了,可以参考:点击打开链接 我的这篇教程和上篇博客的不同之处: 1 上篇博客直接生成二维码图片放到d盘的某个文件夹下,我的二维码生成二维码后直接用Base64编 ...

  5. 【barcode】 基于Jbarcode开源库生成条形码,提供添加备注信息的解决方案

    上一篇使用google的barcode4开源库生成条码,效果还是不错的,但是由于前几天leader有个需求,条码下面要添加备注信息- 当然解决方案也可以生成两个图片拼接在一起,但是觉得不太方便,就查了 ...

  6. JAVA使用barcode4j生成条形码和二维码图片以及带logo的二维码,验证码图片

    二维码 1.Maven引入barcode4j依赖 <!-- 条形码生成 --><dependency><groupId>net.sf.barcode4j</g ...

  7. C#利用ZXing.Net生成条形码,二维码和带Logo的二维码

    本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...

  8. springboot生成条形码并直接输出显示

    springboot生成条形码,并直接输出 条形码工具类: package com.cz.util;import com.google.zxing.BarcodeFormat; import com. ...

  9. Java 生成二维码 zxing生成二维码 条形码 服务端生成二维码 Java生成条形码

    Java 生成二维码 zxing生成二维码 条形码 服务端生成二维码 Java生成条形码 一.关于ZXing 1.ZXing是谷歌开源的支持二维码.条形码 等图形的生成类库:支持生成.和解码功能. G ...

最新文章

  1. Exchange 2016 Outlook新建会议时收到提醒邮件
  2. 【SQLServer】【恢复挂起的解决方案】附加文件时候的提示“无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的。 ”【数据库恢复】...
  3. Cisco3560交换机enable密码破解和恢复出厂设置
  4. 手势识别之平移、缩放、长按、旋转、滑动
  5. 树莓派 更新 时间 时区
  6. 134. Leetcode 136. 只出现一次的数字 (位运算-只出现一次的数字相关题目)
  7. 蓝桥杯java 算法训练 区间K大数查询
  8. 1.6 网络编程之 UDP通信
  9. 【SDL的编程】VC环境搭建
  10. python如何查看源码_查看“Python-2020-fall”的源代码
  11. HBase的Row Key设计
  12. Struts入门学习(三)---自定义类型转换器
  13. git 还原到某个版本_Git常用命令
  14. 旅游景点宣传画册PPT模板
  15. 苹果Mac可视化磁盘清理工具:Disk Expert
  16. Oracle数据库索引使用及索引失效总结
  17. 【车间调度】基于matlab粒子群算法求解6X6车间调度问题【含Matlab源码 411期】
  18. 热血江湖Java_热血江湖源码+教程
  19. 宽带未能和路由器连接服务器,连接路由器却上不了网怎么办
  20. JSAPI支付——H5网页端调起支付接口

热门文章

  1. Fortran调用C动态链接库
  2. oracle insert replace into,讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
  3. python学什么教学_学习python的几个小技巧
  4. 【无人机路径规划】基于深度强化学习的多无人机辅助边缘计算网络路径规划(Matlab代码实现)
  5. 2620: 离别感言
  6. Moonlight Client梳理
  7. 任何爆料都会翻转 但亚马逊多账号防关联不会
  8. uniapp视频播放绿屏/花屏的问题
  9. 支付宝的数据库是MySQL变种_浅谈MySql的储存引擎(表类型)
  10. 【推推】:列表模块原型图