You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:36:02