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;
@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.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 {
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");
}
};
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;
}
public static BufferedImage insertWords(BufferedImage image, String words,boolean needCompress){
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;
int wordStartY=HEIGHT+20;
g2d.drawString(words, wordStartX, wordStartY);
g2d.dispose();
outImage.flush();
return outImage;
}
return null;
}
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);
}
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;
}
}