C# 使用ZXing.Net生成GS1-128

C# 使用ZXing.Net生成GS1-128,c#,barcode,zxing.net,C#,Barcode,Zxing.net,我们使用ZXing.Net生成代码128条形码,一切正常 BarcodeWriter writer = new BarcodeWriter { Format = BarcodeFormat.CODE_128 }; writer.Write("01950123456789031000012317150801").Save("code128.png", ImageFormat.Png); 最近,我们被要求将格式更改为GS1-128,经过一些研究,我们发现这个解决方案使用FNC1(ASCII 29

我们使用ZXing.Net生成代码128条形码,一切正常

BarcodeWriter writer = new BarcodeWriter { Format = BarcodeFormat.CODE_128 };
writer.Write("01950123456789031000012317150801").Save("code128.png", ImageFormat.Png);

最近,我们被要求将格式更改为GS1-128,经过一些研究,我们发现这个解决方案使用FNC1(ASCII 29)来写入数据矩阵GS1。

但是,如果我们将条形码格式更改为
BarcodeFormat.code_128
,程序将抛出异常,在输入中显示
错误字符:

BarcodeWriter writer = new BarcodeWriter { Format = BarcodeFormat.CODE_128 };
writer.Write($"{(char)29}019501234567890310000123{(char)29}17150801").Save("gs1code128.png", ImageFormat.Png);

任何建议都将不胜感激。

您必须使用值“(char)0x00F1”作为组分隔符,而不是“(char)29)。

通过Zxing.Net生成GS1-128条形码的方法更简单,无需手动将字符FNC1添加到内容中

您应该只设置标志GS1Format=true

barcodeWriterSvg.Format = BarcodeFormat.CODE_128;
barcodeWriterSvg.Options.GS1Format = true;
barcodeWriterSvg.Options.Margin = 64;

var svgImage = barcodeWriterSvg.Write(content);
return svgImage.Content;

但是最初的解决方案是在字符串开头手动添加FNC1字符

谢谢!效验如神这是否意味着每种条形码格式都有自己的分组分隔符?是和否。我认为29是最常见的。不知道为什么会为GS1-128选择另一个。但这两种条形码类型是zxing为GS1支持的唯一条形码类型。目前,选项GS1格式仅由二维码编码器使用。它仅在第一个位置添加GS1格式标识符FNC1。没有添加组分隔符或类似的控制字符。
barcodeWriterSvg.Format = BarcodeFormat.CODE_128;
barcodeWriterSvg.Options.GS1Format = true;
barcodeWriterSvg.Options.Margin = 64;

var svgImage = barcodeWriterSvg.Write(content);
return svgImage.Content;