Я столкнулся с этой проблемой. Я закончил копаться в исходном коде iText, чтобы понять это. iText изменяет размер штрих-кода в соответствии с предоставленным вами текстом.
iText поддерживает следующие размеры штрих-кодов матрицы данных:
10x10, 12x12, 8x18, 14x14, 8x32, 16x16, 12x26, 18x18, 20x20, 12x36, 22x22, 16x36, 24x24, 26x26, 16x48, 32x32, 36x36, 40x40, 44x44, 48x48, 52x52, 64x64, 72x72, 80x80 96x96, 104x104, 120x120, 132x132, 144x144
Как видите, здесь есть ряд неквадратных размеров. Я создал список размеров квадратных штрих-кодов, а затем попробовал каждый размер, проверяя возвращаемое значение вызова generate ().
// supported square barcode dimensions
int[] barcodeDimensions = {10, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144};
BarcodeDatamatrix barcode = new BarcodeDatamatrix();
barcode.setOptions(BarcodeDatamatrix.DM_AUTO);
// try to generate the barcode, resizing as needed.
for (int generateCount = 0; generateCount < barcodeDimensions.length; generateCount++) {
barcode.setWidth(barcodeDimensions[generateCount]);
barcode.setHeight(barcodeDimensions[generateCount]);
int returnResult = barcode.generate(text);
if (returnResult == BarcodeDatamatrix.DM_NO_ERROR) {
return barcode.createImage();
}
}
throw new Exception("Error generating barcode.");