• C#生成商品条码


    备忘录:关于C#生成商品条码

     
    志铭-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,//图片空白边距
            PureBarcode = 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. 使用字体

    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:
                            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;
        }
    }
    
    CS 复制 全屏
    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

    作者:shanzm
    欢迎交流,欢迎指教!
  • 相关阅读:
    Corosync+Pacemaker+DRBD+Mysql高可用HA配置
    高可用集群corosync+pacemaker之crmsh使用
    nfs+DRBD+corosync+pacemaker 实现高可用(ha)的nfs集群
    nginx匹配
    2011年的最后一篇
    Python自然语言处理学习笔记(66):7.7 小结
    Python自然语言处理学习笔记(65):7.6 关系抽取
    Python自然语言处理学习笔记(64): 7.5 命名实体识别
    Python自然语言处理学习笔记(67):7.8 扩展阅读
    Python自然语言处理学习笔记(68):7.9 练习
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/16232927.html
Copyright © 2020-2023  润新知