我遇到了两个内容相同但原始字节不同的条形码之间的差异.一个条形码是使用一个名为Labelary的在线工具生成的,该工具用于创建ZPL标签,另一个条形码是在我的Java代码中使用ZXing库生成的.尽管具有相同的内容,但条形码的视觉外观不同.

My Barcode

My barcode

Raw text: 12345678
Raw bytes: 69 0c 22 38 4e 2f 6a

BarcodeGenerator.java

public byte[] getBarCode128(String data, int width, int height) {
    Code128Writer writer = new Code128Writer();
    BitMatrix matrix = writer.encode(data, BarcodeFormat.CODE_128, width, height);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    try {
        MatrixToImageWriter.writeToStream(matrix, "png", outputStream);
        return outputStream.toByteArray();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

Main.java

public static void main(String[] args) {
    String data = "12345678";
        
    int width = (int) (data.length() * 11 * moduleWidth);
    int height = 270;
        
    BarcodeGenerator barcode = new BarcodeGenerator();
    byte[] barcodeImageBytes = barcode.getBarCode128(data, (int) width, (int) height);
}

Barcode from Labelary

点击here查看源代码.

Barcode from Labelary

Raw text: 12345678
Raw bytes: 68 11 12 13 14 15 16 17 18 3c 6a

造成这种差异的潜在原因是什么?如何使用Java中的ZXing库确保正确的条形码生成?

推荐答案

两者都是正确的,只是编码不同. 69是代码C,每个代码点有两个数字.较长的68是B代码.

另请参阅:https://en.wikipedia.org/wiki/Code_128

如果您想强制您的代码也执行较长的代码B,您可以将FORCE_CODE_SET编码提示设置为"B".

对编码提示的胡乱猜测:

Map<EncodeHintType, String> hints = new HashMap<>();
hints.put(EncodeHintType.FORCE_CODE_SET, "B");
BitMatrix matrix = writer.encode(data, BarcodeFormat.CODE_128, width, height, hints);

Java相关问答推荐

使用log 4j2格式的Hibernate 显示SQL日志(log)

如何为具有多对多关系的实体的给定SQL查询构建JPA规范?

BiPredicate和如何使用它

如何在Android上获取来电信息

我的scala文件失败了Scala.g4 ANTLR语法

使用Java Streams API比较两个不同的Java集合对象和一个公共属性

多个Java线程和TreeMap.put()的非预期行为

不推荐使用的Environment.getExternalStorageDirectory().getAbsolutePath()返回的值不同于新的getExternalFilesDir(空)?

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

安装Java Jar应用程序的Install4j遇到ClassNotFoundException的运行时错误

如何在EXCEL单元格中添加形状和文本

如何在盒子的顶部和底部创建两张不同图片(大小相同)的盒子?

Domino中不同的java.Protocol.handler.pkgs设置在XPages Java中导致错误

Java Flux中的延迟增加

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

如何使用jooq更新记录?

如何判断元素计数并在流的中间抛出异常?

如何正确使用java.time类?

在JPanel上使用GridBagLayout并将JButton放在里面时出现问题

在外部类和内部类之间,当调用外部类内部或外部的主方法时,它们的静态初始化程序的运行顺序不同