【问题标题】:Generating GS1 DataMatrix using ZXing.Net使用 ZXing.Net 生成 GS1 DataMatrix
【发布时间】:2023-10-18 07:58:01
【问题描述】:

我需要什么

就是生成一个可以工作的GS1 DataMatrix,使用这个测试内容:

(240)1234567890(10)AA12345(11)123456(21)1(96)1234567

步骤

我已经从这里下载了 nuget 包:

我创建了一个使用此代码的控制台应用程序:

private static void DoGs1DataMatrixStuff()
{
    var writer = new BarcodeWriter
    {
        Format = BarcodeFormat.DATA_MATRIX
    };

    writer
        .Write("(240)1234567890(10)AA12345(11)123456(21)1(96)1234567")
        .Save(@"C:\Temp\barcode.png");
}

没有明显的特定 GS1_DataMatrix 格式我可以使用...

这给了我

如果通过我智能手机上的扫描仪应用程序读取,它会给出我最初呈现的文字内容,而不是我期望的 GS1 的 FNC1 格式:

(240)1234567890(10)AA12345(11)123456(21)1(96)1234567

应该是

2401234567890 10AA12345 11123456211 961234567

从另一个来源(不是我可以使用的来源)我得到了这个条形码:

使用我的智能手机应用程序读取正确的数据。

问题

如何使用 ZXing.Net 重新创建这个有效的 GS1 数据矩阵?

另见

这个link,Chris Bahns 提出了我同样的担忧,但他的请求没有得到有效的答复。

【问题讨论】:

    标签: c# .net barcode zxing datamatrix


    【解决方案1】:

    您必须使用带有 ASCII 字符 29 的格式化字符串(GS - 组分隔符):

    240123456789010AA1234511123456211961234567

    (将“”替换为 ASCII 29)

    ZXing.Net 从 0.15 版本开始支持带有 ASCII 编码器的 GS 符号。它将生成的数据矩阵图像中的 ASCII 29 值替换为 FNC1 代码字 (232)。

    这只是一个低级别的支持。没有内置类或类似的东西可以理解具有固定或可变长度的 AI(应用程序标识符)(类似于 vCard、vEvent、ISBN 等的结果解析器类)。

    【讨论】:

    • 这就是这个:?这导致Message contains characters outside iso-8859-1 encoding.
    • 这与BarcodeFormat.DATA_MATRIX有关,如果我将其切换为QR_CODE,则不会出现此类错误,但是当然数据不好,因为显示为? (QR_CODE 处理不了)。
    • 不,不是那个角色。 ASCII 29 不可打印。例如,您可以使用以下代码对此类字符串进行编码 sn -p writer .Write((char)29 + "2401234567890" + (char)29 + "10AA12345" + (char)29 + "11123456" + (char)29 + "211" + (char)29 + "961234567"); 如果使用具有固定数据长度的应用程序标识符,则不需要每个 (char)29
    • 并且zxing不支持带二维码的GS1。