客户在业务过程中需要打印条形码,以便追踪每个单品。为了符合客户的条码打印机格式,采用了barcode4j+Apache POI的模式。

一开始用bufferImg读图再转换成byteArray的方法写,发现无法批量插入,十几张条形码只能显示为一张。后面采用了不在本地存储图片,直接用byteArray写入,成功。下面是代码。

public int getExcel(HttpServletRequest request) throws IOException, IllegalArgumentException, IllegalAccessException {List<BarCode> list = getBarCodeByStatus(0);if (list != null) {FileOutputStream fileOut = null;HSSFClientAnchor anchor = null;HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet1 = wb.createSheet("条码打印");HSSFFont hssfFont = wb.createFont();hssfFont.setCharSet(HSSFFont.DEFAULT_CHARSET);hssfFont.setFontHeightInPoints((short) 12);hssfFont.setFontName("宋体");sheet1.setDefaultRowHeightInPoints((short) 15);//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArrayfileOut = new FileOutputStream(AppConstants.getUploadedPath(request) + "封装袋编码表.xls");try {int row1 = 8;int row2 = 12;for (BarCode b : list) {//anchor主要用于设置图片的属性anchor = new HSSFClientAnchor(0, 0, 1023, 255, (short) 0, row1, (short) 3, row2);anchor.setAnchorType(3);//插入图片patriarch.createPicture(anchor, wb.addPicture(BarCodeUtil.generateByte(b.getCode()), HSSFWorkbook.PICTURE_TYPE_PNG));
//符合客户打印机格式,间隔13行row1 += 13;row2 += 13;b.setPrtStatus(1);}// 写入excel文件wb.write(fileOut);System.out.println("----Excel文件已生成------");} catch (Exception e) {e.printStackTrace();} finally {if (fileOut != null) {try {fileOut.close();} catch (IOException e) {e.printStackTrace();}}}return 0;} else {return 1;}}

需要导入一个

import org.apache.commons.codec.digest.DigestUtils;

不然会报class not found

barcodeUtil代码

package com.xxt.utils;import org.apache.fop.util.UnitConv;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;import java.awt.image.BufferedImage;
import java.io.*;public class BarCodeUtil {public static File generateFile(String msg, String path) {File file = new File(path);try {generate(msg, new FileOutputStream(file));} catch (FileNotFoundException e) {throw new RuntimeException(e);}return file;}/*** 生成字节** @param msg* @return*/public static byte[] generateByte(String msg) {ByteArrayOutputStream ous = new ByteArrayOutputStream();generate(msg, ous);return ous.toByteArray();}/*** 生成到流** @param msg* @param ous*/public static void generate(String msg, OutputStream ous) {if (StringUtils.isEmpty(msg) || ous == 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.doQuietZone(false);String format = "image/png";try {// 输出到流BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi,BufferedImage.TYPE_BYTE_BINARY, false, 0);// 生成条形码bean.generateBarcode(canvas, msg);// 结束绘制canvas.finish();} catch (IOException e) {throw new RuntimeException(e);}}//导出}

barcode4j+Apache POI,批量导出条形码图片到excel相关推荐

  1. 通过Java批量导出带有图片的Excel文件数据

    批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...

  2. POI批量导出Excel ZIP打包下载

    POI批量导出Excel ZIP打包下载 1.公共抽象导出Excel类 需要自己实现两个抽象方法: getColumValueForColunmName : 扩展方法:根据名称判断来做值得转换 比如: ...

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

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

  4. 使用POI批量导出Excel文件(SSM)

    文章目录 前言 如何使用POI批量导出Excel文件(SSM) 一.什么是POI? 模块 二.使用步骤 1.引入依赖 2.mapper层代码 包括Mapper接口.Mapper SQL代码 Mappe ...

  5. 大多数人不敢想的PDF操作:添加书签,电子签名,压缩,修改文字,提取部分页面为新文件、批量导出为图片

    目录 PDF神仙级软件和网站(免费) PDF加书签 PDF电子签名 PDF文件压缩 修改PDF内的文字 提取部分页面为新PDF文件 PDF批量导出为图片 PDF神仙级软件和网站(免费) 主要以比较方便 ...

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

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

  7. 导出带图片的Excel报表

    导出带图片的Excel报表 先引用 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll程序集,然后在后台页面引用using Excel = Microsof ...

  8. POI动态导出多层表头的EXCEL文件

    POI动态导出多层表头的EXCEL文件 表格表头导出 单行表头 多行表头 以前接触过一个很古老的导出Excel,实现的逻辑是先声明一个导出的Excel模板,模板里报表的表头名称和顺序是固定的,这样执行 ...

  9. Java 批量导出包含图片的Word文档

    业务需求:客户需要在资产管理系统中批量导出包含资产二维码等信息的Word文档,如下图 导出Word文档效果如下图 需求就摆在面前,接下来就是技术选型问题了.由于一开始做编程是从OC入门的,但是由于OC ...

最新文章

  1. 在线答题系统开发经验mysql,php
  2. 切记切记:Spring配置文件中,Component-scan无法扫描到的类中的自动装配对象无法被调用,报空指针错误。...
  3. (0001) iOS 开发之收集第三方资源篇
  4. java笔试题(3)
  5. express组合gulp自动更新代码重启浏览器
  6. C++ Vector学习笔记
  7. 利用TabWidget实现底部菜单
  8. 『转』死去度百飞鸽传书
  9. java演练 谁在哪里做什么 文字小游戏开发
  10. openjudge #输出一个整数序列中与指定数字相同的数的个数。
  11. CGAffineTransform 放射变换
  12. Android 网络学习之获取服务器文本文件
  13. Linux环境下软件安装
  14. history 历史命令
  15. java三元运算符_java三元运算符详解
  16. 软考知识点笔记之----项目范围说明书
  17. MP3 Cutter Joiner for Mac(mp3剪辑合并工具)
  18. Windows2003 IIS6 + PHP-5.3.6-nts-Win32-VC9-x86.zip
  19. NeuroImage: ADHD青少年右侧额下回皮层fMRI神经反馈的功能连接变化
  20. mac c语言identifier,mac下自动切换输入法

热门文章

  1. 【毕业设计】论文你要用的参考文献这里总结了一部分
  2. linux远程连接windows桌面背景,xrdp实现windows 远程桌面连接linux(各用户桌面独立)...
  3. swagger参数为list时example的显示问题
  4. CALayer 3 详解 -----转自李明杰
  5. Opengl的一些常用功能理解
  6. 分布式数据库九大发展趋势|文末附完整报告下载
  7. pytest-fixture应用
  8. Oracle GoldenGate(OGG)基础知识整理
  9. 【为宏正名】本应写入教科书的“世界设定”
  10. 3D打印机硬件驱动-马林固件最新版本2.0.X中文注释(2)marlin 2.0.9.2 截至发稿时间2021年12月16日