人类可读的条形码与条形码平行放置

2024-01-19

以下是根据传递的 Id 生成条形码的代码,条形码生成良好:

 @Override  
 public byte[] generateBarcodeForId(String Id) throws VisitMastException{
     
     BarcodeUtil util = BarcodeUtil.getInstance();
     BarcodeGenerator gen;
     ByteArrayOutputStream bao = null;
     try {
         bao = new ByteArrayOutputStream();
        
         //Create the barcode bean
         Code128Bean bean = new Code128Bean();
         
         int dpi = 150;
         
         //Configure the barcode generator
         bean.setModuleWidth(UnitConv.in2mm(1.1f / dpi)); //makes the narrow bar, width exactly one pixel
         bean.doQuietZone(true);
         bean.setBarHeight(4);
         //bean.setVerticalQuietZone(3);
         bean.setQuietZone(0);
         bean.setMsgPosition(HumanReadablePlacement.HRP_TOP);
         BitmapCanvasProvider canvas = new BitmapCanvasProvider(
             bao, "image/jpeg", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
         bean.generateBarcode(canvas, Id);
         canvas.finish();
     } catch (IOException  e) {
         throw new VisitMastException(VisitMastException.BAD_REQUEST,
                    messageSource.getMessage(CodeEnum.BARCODE_GENERATING_ERROR.getValue(), null, Locale.ENGLISH));
     }
     return bao.toByteArray();
 }

此代码将人类可读的值放置在条形码上方:

bean.setMsgPosition(HumanReadablePlacement.HRP_TOP);

人类可读值可以放置在底部或顶部,或者两者都不放置。是否可以将人类可读的值添加到与条形码平行或旁边的位置。

我们还可以减小人类可读值的大小吗?


Barcode4J 不支持开箱即用。一种解决方案(除了将此功能添加到 Barcode4J 之外)可能是创建一个双倍尺寸的新图像,并将条形码和文本区域复制到其中。

找到一个展示总体思路的小 PoC 片段。

BitmapCanvasProvider canvas = new BitmapCanvasProvider(dpi, 
        BufferedImage.TYPE_BYTE_BINARY, false, 0);
bean.generateBarcode(canvas, Id);
canvas.finish();

BufferedImage image = canvas.getBufferedImage();
BufferedImage temp = new BufferedImage(image.getWidth() * 2, 
        image.getHeight() / 2 - 1, image.getType());
Graphics2D g = temp.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_OFF);
g.drawImage(image, 0, -image.getHeight() / 2, null);
g.drawImage(image, image.getWidth(), 0, null);

g.dispose();        
bao.reset();
ImageIO.write(temp, "png", bao);

生成的字节存储到文件中

byte[] byteArray = generateBarcodeForId("1111");
BufferedImage image = ImageIO.read(new ByteArrayInputStream(byteArray));
ImageIO.write(image, "jpg", new File("code128.jpg"));

结果图像code128.jpg.

另一种可能性是生成条形码HumanReadablePlacement.HRP_NONE然后使用绘制文本canvas.deviceText(...).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人类可读的条形码与条形码平行放置 的相关文章

随机推荐