我遇到了这个确切的问题。我最终深入研究了 iText 源代码来解决这个问题。iText 正在调整条形码的大小以适合您提供的文本。
itext支持DataMatrix条形码的以下大小:10x10,12x12,8x18,14x14,8x32,16x16,12x26,18x18,20x20,12x36,22x22,16x36,24x24,22x26,16x48,32x32,36x36,40x40,44x44,48x48,52x52 , 64x64, 72x72, 80x80, 88x88, 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.");