package cn.com.utils; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.springframework.stereotype.Component; import org.springframework.util.Base64Utils; import java.io.File; import java.io.FileInputStream; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; public class BarUtils { /** * 绘制条形码 * * @param content 要生成条形码包含的内容 * @return 返回生成条形的位图 */ public static File createBarcode(String content) throws Exception { final int width = 180; final int height = 50; final String format = "png"; //配置参数 Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 容错级别 这里选择最高H级别 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); MultiFormatWriter writer = new MultiFormatWriter(); // 图像数据转换,使用了矩阵转换 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数 BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.CODE_128, width, height, hints); Path file = File.createTempFile("message_barcode_",".png").toPath(); MatrixToImageWriter.writeToPath(bitMatrix, format, file); return file.toFile(); } /** * 绘制条形码 * * @param file 要编码的file * @return 返回base64编码后的字符串 */ public static String encodeImage(File file) throws Exception { FileInputStream fileInputStream = FileUtils.openInputStream(file); byte[] buffer = new byte[(int) file.length()]; fileInputStream.read(buffer); fileInputStream.close(); return Base64Utils.encodeToString(buffer); } }
条形码生成工具类