Я получаю DataMatrix код, используя следующую строку:Как обращаться с FNC1/<GS> при кодировании GS1-совместимого кода DataMatrix?
BitMatrix bitMatrix = new DataMatrixWriter().encode(dmie.preEncodeBarcode(dataToEncode), BarcodeFormat.DATA_MATRIX, 50, 50, null);
входной строки я получаю содержит «FNC1» (так же, как простые символы в строке), чтобы отметить конец динамического поля, и в всего строка содержит 4 разных идентификатора приложения GS1 DataMatrix и их соответствующие значения.
Что preEncodeBarcode() делает это заменить "FNC1" с <GS>
, например, так:
input = input.replaceAll("FNC1", new String(new byte[] {0x1d}));
Поскольку в противном случае я просто получить "FNC1910005FNC1230202 [...]" закодированы в DataMatrix, а что Я хочу, конечно, <GS>
вместо текста «FNC1».
Однако при замене FNC1 с <GS>
(я попытался с помощью '\ u001c', а), я получаю это очень странный двойной DM-код вместо нормального:
Только если я пропущу замену «FNC1» на <GS>
, я получу правильный.
Любая идея, как получить правильный код DataMatrix на основе моей <GS>
-содержащей строки? Или я просто делаю что-то неправильно, имея <GS>
непосредственно в String? Что я должен сделать в этом случае, чтобы заставить zxing дать мне правильную DataMatrix? Я читал все, но я действительно не могу обмотать голову вокруг этого.
Обновление: Я не уверен, но я мог бы найти какую-то странную ошибку. Это то, что я посылаю к DataMatrixWriter раз я препроцессором строку ввода (пробелы):
[d29100001 21000000049347037 24000163718 390300000002990
Что я нахожу довольно туманна, что если я (в момент запись) отправляет input.substring(2, input.length());
или input.substring(0, input.length()-3);
, тогда он работает просто отлично, а если я удаляю только один (или меньше) символ с начала или 2 или меньше с конца, тогда я получаю эту странную DataMatrix. Что еще странно, так это то, что это поведение даже несовместимо - если я добавлю, например, 6 некоторых случайных чисел в конце, тогда он отлично работает, но если я удалю три из этих чисел, то я снова получу проблему. И хуже всего, час назад я не мог отправить input.substring(0, input.length()-3)
, но теперь могу.
Другими словами, я совершенно озадачен.
(PS. Я использую код найден here масштабировать DataMatrix до размера я хочу, но это ZXing, что дает неправильный выход с самого начала.)