• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

备忘录——关于C#生成条形码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

志铭-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;
    }
}
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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#动态调用DLL发布时间:2022-07-13
下一篇:
c通过COM接口调用Excel.Application问题终于解决发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap