使用iText7生成16x48规格DataMatrix条码抛出索引越界异常如何解决
问题原因
iText7中BarcodeDataMatrix类的SetWidth()、SetHeight()方法的作用是指定DataMatrix条码本身的符号行列数(即模块数),而非最终输出的物理尺寸。你传入48、16相当于强制指定条码为16行48列的矩形符号,当你传入的内容12345678编码后的容量和这个符号规格不匹配时,就会触发内部数组越界异常。
解决方案
先生成默认规格的条码对象,再调整输出时的尺寸到你需要的16x48规格即可,有两种常用实现方式:
- 方式1:直接修改生成的条码对象尺寸
// 先正常构造条码,不要调用SetWidth/SetHeight指定符号规格 BarcodeDataMatrix barreCode = new BarcodeDataMatrix("12345678"); barreCode.SetOptions(BarcodeDataMatrix.DM_EDIFACT); // 生成默认尺寸的表单对象 PdfFormXObject xobj = barreCode.CreateFormXObject(_pdfDoc); // 手动设置为目标物理尺寸(单位默认是PDF标准点) xobj.SetWidth(48); xobj.SetHeight(16);
- 方式2:添加到画布时指定输出尺寸
BarcodeDataMatrix barreCode = new BarcodeDataMatrix("12345678"); barreCode.SetOptions(BarcodeDataMatrix.DM_EDIFACT); PdfFormXObject xobj = barreCode.CreateFormXObject(_pdfDoc); // 添加到画布时直接指定坐标和宽高,参数依次为X对象、左下角X坐标、左下角Y坐标、宽度、高度 canvas.AddXObject(xobj, 100, 100, 48, 16);
注意:如果你的16x48指的是DataMatrix符号本身的行列数而非物理尺寸,需要先确认你传入的内容长度符合该规格的编码容量要求,再进行符号规格的强制指定,避免编码不匹配报错。
内容的提问来源于stack exchange,提问作者qgrillon
相关产品推荐
相关产品推荐

