1.公司需要在Android 手机中实现绘制PDF417截短码格式的二维码,这种码在工业生产中常用,但是网上关于PDF417Truncated的资料非常少,他其实是PDF417 的一种变体,将非必要信息删除掉,数据也可以正常显示,正常googlZxing 支持PDF417码,但是PDF417截短码不支持,需要我们调整绘制参数修改。
- 首先我引入的库文件
implementation "com.google.zxing.core:zxing:3.5.3"
implementation "com.journeyapps.zxing-android-embedded:4.3.0"
3.分装的方法: 将参数引入并生成bitmap 返回:
public static Bitmap generatePDF417Truncated(String data, int width, int height) {
try {
// 设置编码参数
Map<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
hints.put(EncodeHintType.PDF417_COMPACT, true); // 启用截短模式
hints.put(EncodeHintType.MARGIN, 0); // 设置边距
hints.put(EncodeHintType.PDF417_DIMENSIONS, new Dimensions(1, 3, 1, 4000));
hints.put(EncodeHintType.PDF417_COMPACTION, Compaction.BYTE);
hints.put(EncodeHintType.ERROR_CORRECTION, 2); // 设置错误纠正级别
// 生成PDF417 BitMatrix
MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.PDF_417, width, height, hints);
// 创建Bitmap
Bitmap bitmap = Bitmap.createBitmap(bitMatrix.getWidth(), bitMatrix.getHeight(), Bitmap.Config.ARGB_8888);
for (int x = 0; x < bitMatrix.getWidth(); x++) {
for (int y = 0; y < bitMatrix.getHeight(); y++) {
bitmap.setPixel(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
return bitmap;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//调用方法
generatePDF417Truncated("截短码数据", 480,470));