我正在尝试从 itext 中生成数据矩阵条码。这适用于我的大多数代码,但不适用于某些代码。一个例子是:
由于某种原因,这会产生非方形条形码。当我使用其他公司的编码器(例如 IDAutomation)时,我确实得到了一个有效的方形条形码。
有谁知道为什么会这样?我正在寻找一种解决方案,以便我可以使用嵌入式 iTest DataMatrix 类而不必使用第三方。
我正在使用的代码示例:
BarcodeDatamatrix bar = new BarcodeDatamatrix();
bar.setOptions(BarcodeDatamatrix.DM_AUTO);
bar.generate("HEnSh0701003-2V1");
bcd.addCell(bar.createImage());
其中 bcd 是一个有 2 列的 PdfTable。
最佳答案
我遇到了这个确切的问题。我最终深入研究了 iText 源代码来解决这个问题。 iText 正在调整条形码大小以适合您提供的文本。
iText 支持以下尺寸的数据矩阵条码:
10×10,12×12,8x18,14×14,8X32,16×16,12x26,18×18,20×20,12x36,22×22,16x36,24×24,为26x26,16x48,32×32,36X36,40×40,44x44,48×48,52x52,64×64,最高72x72,80×80,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.");
关于java - iText 数据矩阵生成问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/775625/