我想使用c#Zxing生成1D EAN8条形码。我只能找到生成二维码的代码示例和文档
var writer = new BarcodeWriter
{
Format = BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Height = height,
Width = width
}
};
return writer.Write(textForEncoding);
我可以运行并正常工作,但没有“1DCodeEncodingOptions”或类似命名的函数。我试过了
var writer = new BarcodeWriter
{
Format = BarcodeFormat.EAN_8
};
return writer.Write("1234567");
但它会导致索引错误。
编辑:我现在语法正确,但它没有生成正确的条形码,因为我不知道它所期望的大小,并且似乎没有默认值。
使用ZXing; 使用ZXing.OneD
var writer = new BarcodeWriter
{
Format = BarcodeFormat.EAN_8,
Options = new ZXing.Common.EncodingOptions
{
Height = 100,
Width = 300
}
};
return writer.Write("12345678");
答案 0 :(得分:1)
12345678不是有效的EAN8条形码。 1234567的校验位为0.有关如何计算校验和的信息,请参阅EAN 8 : How to calculate checksum digit?。
ZXing不会阻止你创建无效的条形码(至少在我正在使用的版本0.11中,虽然Codeplex上的当前源看起来像它),但它们不会扫描。扫描程序使用校验和来确保它已正确读取数据。
如果您打算在商业中使用EAN8,则需要从您的国家GS1 Member Organization获取GTIN-8。如果您只打算在商店中销售它们,则应使用限制发行版之一prefixes。
如果您不需要将产品放入零售供应链,我建议采用不同的条形码格式。
Interleaved 2 of 5(BarcodeFormat.ITF
)非常紧凑,但只能包含数字;它没有任何自我检查,并且存在一个设计缺陷,允许条形码从某些角度被误读。建议您在条形码的顶部和底部放置黑条(称为Bearer Bars)。我在ZXing看不到这个选项。
下一个最紧凑的格式是Code 128(BarcodeFormat.CODE_128
),使用代码集C.它在一个模块中编码两个数字(一个六个条和空格的块)。格式是自检(总是有一个检查字符,由扫描仪剥离)。某些扫描仪无法正确处理代码集C.要强制使用代码集B,请使用Code128EncodingOptions
代替Common.EncodingOptions
并将ForceCodesetB
设置为true
。