背景:公司需要使用谷歌的zxing生成条形码,然后用easyPoi导出到excel文件,而生成的条形码图片上下是没有空白的,导出到excel的时候满铺整个excel单元格,上下两条条形码边缘重叠,非常难看。
研究很久zxing的生成条形码设置,无法在生产条形码的时候给图片上下增加白边。导出excel时也无法让单元格上下留空。
方案:生成一张全白图片,将生成的条形码图片重新绘制到新图片上。
/**
* @param srcFile 源条形码图片
* @param targetFile 目标图片文件
* @param width 生成的图片宽
* @param height 生成的图片高
*/
public static void generateBlankBarCode(File srcFile, File targetFile, int width, int height) {
try {
BufferedImage image = ImageIO.read(srcFile);
// 创建画布
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 创建画笔
Graphics paint = bufferedImage.getGraphics();
// 设置画布的背景色
paint.fillRect(0, 0, width, height);
// 设置画笔的颜色
paint.setColor(Color.BLACK);
// 计算绘制图片的高,使条形码上下居中
int targetImageHeight = (height - image.getHeight()) / 2;
// 开始绘制
paint.drawImage(image, 0, targetImageHeight, null);
// 写入到文件
ImageIO.write(bufferedImage, "png", new FileOutputStream(targetFile));
} catch (IOException e) {
e.printStackTrace();
}
}
最终效果图