Flutter中如何生成并显示符合GS1标准的DataMatrix条码?
生成GS1 DataMatrix条码的正确方法
要生成符合GS1标准的DataMatrix条码,核心是正确插入FNC1控制字符并配置条码生成器的GS1模式,以下是可行的实现方案:
关键要点
- GS1 DataMatrix的FNC1对应ASCII 29(GS字符,代码中用
\x1D表示),不是{FNC1}、这类文本符号。 - 必须启用条码生成器的GS1格式支持,否则即使插入了控制字符也会被当作普通DataMatrix处理。
方案1:直接使用BarcodeWidget配置GS1模式
import 'package:barcode_widget/barcode_widget.dart'; import 'package:flutter_pdf/flutter_pdf.dart'; // 在数据开头添加ASCII 29(GS字符) String gs1Data = "\x1D010460437111281215A&r2L93P2t1"; return pw.BarcodeWidget( margin: pw.EdgeInsets.all(24), drawText: false, // 启用GS1格式支持 barcode: Barcode.dataMatrix(useGS1Format: true), data: gs1Data, );
方案2:使用DataMatrixEncoder生成GS1条码
import 'package:barcode/barcode.dart'; import 'package:barcode_widget/barcode_widget.dart'; import 'package:flutter_pdf/flutter_pdf.dart'; String rawData = "010460437111281215A&r2L93P2t1"; // 初始化GS1格式的DataMatrix编码器 final encoder = DataMatrixEncoder( rawData, format: DataMatrixFormat.gs1, ); // 生成条码并通过BarcodeWidget显示 return pw.BarcodeWidget( margin: pw.EdgeInsets.all(24), drawText: false, barcode: Barcode.dataMatrix(), data: encoder.toRawString(), );
注意事项
- 部分条码扫描器需要手动开启「GS1解码模式」才能正确识别生成的GS1 DataMatrix条码,生成后请确认扫描器的配置。
- 不要用可视化的FNC1标记替换实际的ASCII控制字符,扫描器只会识别ASCII 29作为GS1 DataMatrix的起始标识。
内容的提问来源于stack exchange,提问作者Артем Ильинский
相关产品推荐
相关产品推荐

