备忘录:关于C#生成商品条码
2022-02-15 22:21
1986 查看
目录
志铭-2022年2月15日 22:15:46
0. 背景说明
在.net程序中生成69码的条形码很容易
生成的条形码使用手机扫码和扫码枪都是可以准确的扫描
但是,这次我需要生成69码的条形码
可是我发现,我生成的69码对应的条形码和超市商品的打印的不一样,
一般商品上的69码的条形码两边的和中间的线条都会长出一段的
之前程序中的生成的条形码都是仓库和内部使用不需要在意这些细节,
而这次打印的吊牌需要直接展示给用户,所以需要注意一些细节
一般搜索.net创建条形码都是使用Zxing,但是达不到我所期望
最终发现使用字体实现效果极好,而且使用字体在报表中展示时无需要使用图片,直接使用文字即可
测试了三种方法,将三种方法记录于此
1. 使用ZXing.NET
PM>Install-Package ZXing.Net -Version 0.16.8
using ZXing; using ZXing.Common; /// <summary> /// 使用ZXing创建条形码 /// </summary> /// <param name="barCode">条码</param> /// <param name="height">高度</param> /// <param name="width">宽度</param> /// <returns>Bitmap图片</returns> public static Bitmap GenerateBarCodeByZXing(string barCode,string height=310,string width=120) { EncodingOptions encoding = new EncodingOptions() { GS1Format = true, Height = height,//设置一维码宽高 Width = widht, Margin = 0,//图片空白边距 Pur 564 eBarcode = false//在条码下显示条码,true则不显示 }; //生成条形码的图片 BarcodeWriter wr = new BarcodeWriter() { //进行指定规格 Options = encoding, Format = BarcodeFormat.EAN_13 // BarcodeFormat.CODE_128// }; Bitmap img = wr.Write(barCode);//生成一维码图片 return img; }
2. 使用BarcodeLib
PM>Install-Package BarcodeLib -Version 2.4.0
using BarcodeLib; /// <summary> /// 使用BarcodeLib生成条形码 /// </summary> /// <param name="barCode">内容</param> /// <returns></returns> public static Image GenerateBarCodeByBarcodeLib(string barCode) { Barcode barcode = new Barcode() { IncludeLabel = true,//是否包含图片下面的文字信息 Alignment = AlignmentPositions.CENTER,//一维码在图片居中 Width = 250, Height = 100, RotateFlipType = RotateFlipType.RotateNoneFlipNone,//图像反转 BackColor = Color.White,//背景色 ForeColor = Color.Black,//前景色 }; return barcode.Encode(TYPE.EAN13, barCode); }
3. 使用字体
-
这是参考一个YouTube Up主的方法,视频连接见参考链接
-
首先在程序安装的机器上安装:ean13.ttf字体
下载地址:http://www.downcc.com/font/232056.html
关于69码原理
internal class EAN13Class { public static string Barcode13Digits = ""; /// <summary> /// 12位条码补齐校验位生成13位的条码 /// </summary> /// <param name="chaine"></param> /// <returns></returns> public static string EAN13(string chaine) { int i; int first; int checkSum = 0; string Barcode = ""; bool tableA; if (Regex.IsMatch(chaine, "^\\d{12}$")) { for (i = 1; i < 12; i += 2) { System.Diagnostics.Debug.WriteLine(chaine.Substring(i, 1)); checkSum += Convert.ToInt32(chaine.Substring(i, 1)); } checkSum *= 3; for (i = 0; i < 12; i += 2) { checkSum += Convert.ToInt32(chaine.Substring(i, 1)); } chaine += (10 - checkSum % 10) % 10; Barcode13Digits = chaine.ToString(); Barcode = chaine.Substring(0, 1) + (char)(65 + Convert.ToInt3(chaine.Substring(1, 1))); first = Convert.ToInt32(chaine.Substring(0, 1)); for (i = 2; i <= 6; i++) { tableA = false; switch (i) { case 2: if (first >= 0 && first <= 3) { tableA = true; } break; case 3: if (first == 0 || first == 4 || first == 7 || first== 8) { tableA = true; } break; case 4: if (first == 0 || first == 1 || first == 4 || first== 5 || first == 9) { tableA = true; } break; case 5 1f91 : if (first == 0 || first == 2 || first == 5 || first== 6 || first == 7) { tableA = true; } break; case 6: if (first == 0 || first == 3 || first == 6 || first== 8 || first == 9) { tableA = true; } break; } if (tableA) { Barcode += (char)(65 + Convert.ToInt32(chaine.Substrin(i, 1))); } else { Barcode += (char)(75 + Convert.ToInt32(chaine.Substrin(i, 1))); } } Barcode += "*"; for (i = 7; i <= 12; i++) { Barcode += (char)(97 + Convert.ToInt32(chaine.Substring(i, 1)); } Barcode += "+"; } return Barcode; } }
string Check12Digits = txtForFont.Text.PadRight(12, '0');//不足12位用0总右侧补齐 string Barrcode = EAN13Class.EAN13(Check12Digits); labForFont.Text = Barrcode;
4. 参考
相关文章推荐
- C#关于程序集生成失败【引用DLL及第三方DLL没有强名称的解决办法】
- C# BarCodeToHTML条码生成类
- C#.net关于生成html静态页面的问题
- 【寻求】关于C#映射动态生成类方面的资料(不是数据库映射生成类)
- 关于生成缩略图:c#
- C# BarCodeToHTML条码生成类
- C#中关于XML的读取和生成
- [C#]关于datagridview中合并单元和和将文字生成图片
- C# BarCodeToHTML条码生成类
- 关于商品条码
- 关于C#操作EXCEL,生成图表的全面应用之一(利用Microsoft.Office.Interop.Excel)【转载】
- c# WinForm 窗体美化(二)--关于东日skinbuilder软件生成皮肤的使用
- XSD生成 C# 类,关于decimal 类型在webservice 不能显示值的问题
- ZXing.Net C#条码 二维码生成库
- 译:c#生成条码的web控件
- C#.net关于生成html静态页面的问题 .
- 关于C#应用程序菜单,让程序中生成。
- 条码打印软件如何批量生成流水号EAN-13商品条码
- 关于c#生成word。
- vb/java/c# 生成code128 条码/QR Code二维码 导出excel