java批量生成条形码图片 打包zip (自测有效)

pom引入jra包

<!--        批量生成条形码--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.2.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.2.0</version></dependency>

完整Controller代码

package com.hx.demo.controller;import com.hx.demo.Util.BarCodeUtil;
import org.omg.PortableServer.LIFESPAN_POLICY_ID;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.*;
import java.lang.reflect.Array;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;/********************************************* @author     :Whx* @className  : * @description: TODO* @date       :2021/10/3 15:12* ******************************************/
@Controller
public class BarCodeUtils {// 条形码接口@RequestMapping("/getBarCode")public void getBarCode(HttpServletResponse response, ArrayList<String> list) throws Exception{ZipOutputStream zos =null;String  downloadFilename = "导出条码";//转换中文否则可能会产生乱码downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");// 指明response的返回对象是文件流response.setContentType("application/octet-stream");// 设置在下载框默认显示的文件名response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename+".zip");zos = new ZipOutputStream(response.getOutputStream());for (String o : list) {zos.putNextEntry(new ZipEntry(o+".png"));ImageIO.write(BarCodeUtil.encode(o,true),"jpg",zos);}zos.flush();zos.close();}
}

完整BarCodeUtil代码

package com.hx.demo.Util;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.oned.Code128Writer;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import java.util.Map;/****/
@Service
public class BarCodeUtil {/*** 生成code128条形码** @param height        条形码的高度* @param width         条形码的宽度* @param message       要生成的文本* @param withQuietZone 是否两边留白* @param hideText      隐藏可读文本* @return 图片对应的字节码*//** 条形码宽度 */private static final int WIDTH = 332;/** 条形码高度 */private static final int HEIGHT = 50;/** 加文字 条形码 */private static final int WORDHEIGHT = 80;/*** 设置 条形码参数*/private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {private static final long serialVersionUID = 1L;{// 设置编码方式put(EncodeHintType.CHARACTER_SET, "utf-8");}};/*** 生成 图片缓冲* @author fxbin* @param vaNumber  VA 码* @return 返回BufferedImage*/public static BufferedImage getBarCode(String vaNumber){try {Code128Writer writer = new Code128Writer();// 编码内容, 编码类型, 宽度, 高度, 设置参数BitMatrix bitMatrix = writer.encode(vaNumber, BarcodeFormat.CODE_128, WIDTH, HEIGHT, hints);return MatrixToImageWriter.toBufferedImage(bitMatrix);} catch (WriterException e) {e.printStackTrace();}return null;}/*** 把带logo的条形码下面加上文字* @author fxbin* @param image  条形码图片* @param words  文字* @return 返回BufferedImage*/public static BufferedImage insertWords(BufferedImage image, String words,boolean needCompress){// 新的图片,把带logo的二维码下面加上文字if (StringUtils.isNotEmpty(words)) {BufferedImage outImage = new BufferedImage(WIDTH, WORDHEIGHT, BufferedImage.TYPE_INT_RGB);Graphics2D g2d = outImage.createGraphics();// 抗锯齿setGraphics2D(g2d);// 设置白色setColorWhite(g2d);// 画条形码到新的面板g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);// 画文字到新的面板Color color=new Color(0, 0, 0);g2d.setColor(color);// 字体、字型、字号g2d.setFont(new Font("微软雅黑", Font.PLAIN, 18));//文字长度int strWidth = g2d.getFontMetrics().stringWidth(words);//总长度减去文字长度的一半  (居中显示)int wordStartX=(WIDTH - strWidth) / 2;//height + (outImage.getHeight() - height) / 2 + 12int wordStartY=HEIGHT+20;// 画文字g2d.drawString(words, wordStartX, wordStartY);g2d.dispose();outImage.flush();return outImage;}return null;}/*** 设置 Graphics2D 属性  (抗锯齿)* @param g2d  Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制*/private static void setGraphics2D(Graphics2D g2d){g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);Stroke s = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);g2d.setStroke(s);}/*** 设置背景为白色* @param g2d Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制*/private static void setColorWhite(Graphics2D g2d){g2d.setColor(Color.WHITE);//填充整个屏幕g2d.fillRect(0,0,600,600);//设置笔刷g2d.setColor(Color.BLACK);}public static BufferedImage encode(String content,boolean needCompress) throws Exception {BufferedImage image = insertWords(getBarCode(content),content,needCompress);return image;}
}

java批量生成条形码图片 打包zip相关推荐

  1. 使用html2canvas实现批量生成条形码

    /*前台代码*/ 1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Gener ...

  2. python条形码库_python批量生成条形码的示例

    在工作中,有时会遇见需要将数字转换为条码的问题,每次都需要打开条码转换的网站,一次次的转换后截图,一两个还行,但是当需要转换的数量较多时,就会显得特别麻烦,弄不好还会遗漏或者重复,为了解决这个问题,使 ...

  3. C#实现批量生成条形码 ——主要用于准考证号的条形码生成

    功能介绍 1.  批量生成条形码 2.  自由设置图片大小.条形码线高和间距 3.  自由设置标题文本字号大小 4.  自由设置增量(相邻条形码的差量)数制(比如:每考场只生成30名) 源代码 usi ...

  4. excel怎么批量插行_条码打印软件如何批量打印条形码图片(一)

    条码打印软件可以批量打印条形码这个大家都知道,但是如果是已经生成好的条形码图片怎么批量打印呢?如果你遇到这种情况,别着急,今天就给大家用两种方法演示一下如何用条码打印软件批量打印条形码图片. 方法一, ...

  5. 如何批量输出条形码图片

    我们在使用条码软件制作标签时,一般都会直接连接标签打印机将标签打印出来.但是也有用户会将设计完成的标签导出成图片,条码软件支持多种图片格式,比如JPG格式.PNG格式.BMP格式等等.下面我们就用一个 ...

  6. EXCEL 批量生成条形码、二维码方案

    一. 通过条码字体生产条形码 1.网上下载C39HrP24DhTt 条码字体,导入win10 fonts文件夹,excel 中引用C39HrP24DhTt 字体进行显示. (68条消息) Excel ...

  7. 使用Python在Excel中批量生成条形码

    2019独角兽企业重金招聘Python工程师标准>>> 最近在研究盘点机盘点的问题,其中有一部分的商品没有的条形码,就想着自个生成条形码.参考了网上的教程,关于Excel批量生成条形 ...

  8. 编程语言Java 扫描识别条形码图片

    编程语言Java 扫描识别条形码图片 1.条形码扫描识别的实现方法及步骤 本文以Java代码示例介绍如何来扫描和识别条形码图片.这里使用免费条码工具 Free Spire.Barcode for Ja ...

  9. 如何用TXT文档数据批量生成条形码

    我们在制作商品标签的时候,经常需要根据已有的条码数据来批量生成条形码.这些条码数据一般存储在TXT文档.excel表或者是其他类型数据库中,具体怎么操作呢?我们就以TXT文档做实例,和大家分享一下如何 ...

  10. datatable如何生成级联数据_如何把Excel表数据批量生成条形码

    条形码属于一维条码,是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符,条形码的种类比较多,比如常用的Code128码,Code39码,Code93码,EAN-13码, ...

最新文章

  1. 码农技术炒股之路——任务管理器
  2. winform模拟登陆网页_【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)...
  3. AngularJS基本知识点
  4. java 窗口锁定_使用Java锁定屏幕
  5. linux环境下监控日志的变化命令 tail -f
  6. selenium之定位以及切换frame
  7. 记一次安装docker的坑
  8. 【学术相关】你只看到了200万年薪的招聘,看不到被困校园的几十万博士
  9. Cisco路由器——Console线的接法
  10. 张文宏:WHO新型冠状病毒的传言和事实
  11. 认识目标文件的格式—— a.out COFF PE ELF
  12. 【POJ 3977】【折半枚举】【超大背包】Subset【暑期 No.7】
  13. greensock下载_使用GreenSock完成我们的可拖动的画布外菜单
  14. 巴塞尔iii_巴塞尔协议——银行风控实施的超级系统工程 之二
  15. C#语言入门详解(刘铁锰)---泛型
  16. Oracle ORA12514 监听程序当前无法识别连接描述符中请求的服务问题解决
  17. 应届毕业生零基础转行做程序员,怎么看?
  18. 员工缺乏责任心的四大原因
  19. 【RDMA】RDMA编程 和相关资料
  20. 最值得MM购买的手机荐

热门文章

  1. 情感在语文教育中的作用
  2. Excel-冻结窗口和筛选
  3. 如何发送gmail邮件_如何从R和Gmail发送电子邮件
  4. 谷歌浏览器报错“您的连接不是私密连接攻击者可能会试图从 xxx 窃取您的信息(例如:密码、通讯内容或信用卡信息)“
  5. span标签置灰_ant-desgin-vue——tree自定义不可选用的置灰或禁用
  6. Word实现奇数页眉为一级标题文字,偶数页眉为论文标题
  7. 前端装逼必备--Canvas
  8. 游戏开发记录--敌人追寻玩家
  9. 百度Site App的uaredirect.js实现手机访问,自动跳转网站手机版
  10. AdventureWorksCycle案例分析