ZXing array range error when scanning PDF417 with metadata generated with iText 2.1.7

Viewed 19

I'm using iText 2.1.7 to generate sample segmented PDF417 barcode with the following code:

Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = PdfWriter.getInstance(document, baos);
document.open();
for (int jp=0;jp<8;jp++) {
    BarcodePDF417 barcode = new BarcodePDF417();
    barcode.setText(randomString().getBytes(StandardCharsets.ISO_8859_1));
    barcode.setMacroSegmentCount(8);
    barcode.setMacroSegmentId(jp);
    barcode.setMacroFileId("page1");
    barcode.setOptions(barcode.getOptions() | BarcodePDF417.PDF417_USE_MACRO | BarcodePDF417.PDF417_FORCE_BINARY);
    Image image = barcode.getImage();
    document.add(image);
}    
document.close();

However, when I read this with ZXing, an exception is thrown:

java.lang.IllegalArgumentException: 497 > 496

at java.base/java.util.Arrays.copyOfRange(Arrays.java:3893) at com.google.zxing.pdf417.decoder.DecodedBitStreamParser.decodeMacroBlock(DecodedBitStreamParser.java:261) at com.google.zxing.pdf417.decoder.DecodedBitStreamParser.decode(DecodedBitStreamParser.java:132) at com.google.zxing.pdf417.decoder.PDF417ScanningDecoder.decodeCodewords(PDF417ScanningDecoder.java:537) at com.google.zxing.pdf417.decoder.PDF417ScanningDecoder.createDecoderResultFromAmbiguousValues(PDF417ScanningDecoder.java:312) at com.google.zxing.pdf417.decoder.PDF417ScanningDecoder.createDecoderResult(PDF417ScanningDecoder.java:281) at com.google.zxing.pdf417.decoder.PDF417ScanningDecoder.decode(PDF417ScanningDecoder.java:125) at com.google.zxing.pdf417.PDF417Reader.decode(PDF417Reader.java:89) at com.google.zxing.pdf417.PDF417Reader.decodeMultiple(PDF417Reader.java:78)

It's not always the same barcode that fails, by the tests I've made it happens to be never 1st barcode, but it can be 2nd, 3rd etc.

Do I miss something important when creating Barcode? Or iText is not a good tool? I have doubts about iText because I couldn't find any information how to actually generate metadata (it was ignored until special flags were set), but I couldn't find alternatives either.

0 Answers
Related