目录
- 0. 背景说明
- 1. 使用ZXing.NET
- 2. 使用BarcodeLib
- 3. 使用字体
- 4. 参考
志铭-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,//图片空白边距Pur564eBarcode = 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码原理
- 关于69码的原理:https://www.geek-share.com/detail/2727002708.html
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 51f91: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# Programming How to Create EAN-13 Barcode Generator