一个简单的工具类调用其实也不难
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.0</version>
</dependency>
还需手动导入这个JAR包:
链接:https://pan.baidu.com/s/1nME3E1OmmFibsgbf-OggBQ
提取码:fa2u
BarcodeController
package com.richfit.richfit.controller;
import com.richfit.richfit.BarcodeUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Random;
/**
* @ClassName Barcode
* @Description: 生成条形码
* @Author BruthLi
* @Date 2020/2/8
* @Version V1.0
**/
@Api(value = "生成条形码")
@RestController
@RequestMapping(value = "/sys/barcode")
public class BarcodeController {
/**
* 生成条形码
* @param path
* @param imageType
* @return
* @throws Exception
*/
@ApiOperation(value = "生成条形码",notes = "生成条形码")
@RequestMapping(value = "/barcodeproduct",method = RequestMethod.POST)
public File barCodeProduct(@ApiParam(name = "path",value = "二维码在本地的保存地址例如C:\\",required = true) @RequestParam(value = "path",required = true)String path,
@ApiParam(name = "imageType",value = "生成图片的类型例如 jpg 注意前面不需要加 . ",required = true) @RequestParam(value = "imageType",required = true)String imageType)throws Exception{
//生成随机文件名
StringBuilder sb = new StringBuilder();
sb.append(path);
sb.append(new Random().nextInt(99999999));
sb.append(".");
sb.append(imageType);
BufferedImage image = BarcodeUtil.insertWords(BarcodeUtil.getBarCode("A80/90R8A8A"), "A80/90R8A(8A侧通孔)");
File file = new File(sb.toString());
ImageIO.write(image, imageType,file);
return file;
}
}
BarcodeUtil
package com.richfit.richfit;
import com.aliyuncs.utils.StringUtils;
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 java.awt.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName BarcodeUtil
* @Description: 条形码工具类
* @Author BruthLi
* @Date 2020/2/8
* @Version V1.0
**/
public class BarcodeUtil {
/** 条形码宽度 */
private static final int WIDTH = 300;
/** 条形码高度 */
private static final int HEIGHT = 50;
/** 加文字 条形码 */
private static final int WORDHEIGHT = 75;
/**
* 设置 条形码参数
*/
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){
// 新的图片,把带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 + 12
int 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);
}
}