查看原文
其他

C# 条形码图像生成库

DotNet 2022-07-19

↓推荐关注↓

‍介绍

该库旨在为开发人员提供一个简单的类,以便他们在需要根据数据字符串生成条形码图像时使用。

用法

该库包含一个名为BarcodeLib的类,其中包含三个构造函数:
Barcode();
Barcode(string);
Barcode(string, BarcodeLib.TYPE);

如果决定使用参数创建实例,则参数如下:字符串是要编码到条形码中的数据,而BarcodeLib.TYPE是用于编码数据的符号体系。如果在创建实例时未选择指定数据和类型,则可以稍后(但在编码之前)通过适当的属性指定它们。

BarcodeLib.Barcode b = new BarcodeLib.Barcode();
Image img = b.Encode(BarcodeLib.TYPE.UPCA, "038000356216", Color.Black, Color.White, 290120);
private void btnEncode_Click(object sender, EventArgs e)
{
    errorProvider1.Clear();
    int W = Convert.ToInt32(this.txtWidth.Text.Trim());
    int H = Convert.ToInt32(this.txtHeight.Text.Trim());
    b.Alignment = AlignmentPositions.CENTER;

    //barcode alignment
    switch (cbBarcodeAlign.SelectedItem.ToString().Trim().ToLower())
    {
        case "left": b.Alignment = AlignmentPositions.LEFT; break;
        case "right": b.Alignment = AlignmentPositions.RIGHT; break;
        default: b.Alignment = AlignmentPositions.CENTER; break;
    }//switch

    TYPE type = TYPE.UNSPECIFIED;
    switch (cbEncodeType.SelectedItem.ToString().Trim())
    {
        case "UPC-A"type = TYPE.UPCA; break;
        case "UPC-E"type = TYPE.UPCE; break;
        case "UPC 2 Digit Ext."type = TYPE.UPC_SUPPLEMENTAL_2DIGIT; break;
        case "UPC 5 Digit Ext."type = TYPE.UPC_SUPPLEMENTAL_5DIGIT; break;
        case "EAN-13"type = TYPE.EAN13; break;
        case "JAN-13"type = TYPE.JAN13; break;
        case "EAN-8"type = TYPE.EAN8; break;
        case "ITF-14"type = TYPE.ITF14; break;
        case "Codabar"type = TYPE.Codabar; break;
        case "PostNet"type = TYPE.PostNet; break;
        case "Bookland/ISBN"type = TYPE.BOOKLAND; break;
        case "Code 11"type = TYPE.CODE11; break;
        case "Code 39"type = TYPE.CODE39; break;
        case "Code 39 Extended"type = TYPE.CODE39Extended; break;
        case "Code 39 Mod 43"type = TYPE.CODE39_Mod43; break;
        case "Code 93"type = TYPE.CODE93; break;
        case "LOGMARS"type = TYPE.LOGMARS; break;
        case "MSI"type = TYPE.MSI_Mod10; break;
        case "Interleaved 2 of 5"type = TYPE.Interleaved2of5; break;
        case "Interleaved 2 of 5 Mod 10"type = TYPE.Interleaved2of5_Mod10; break;
        case "Standard 2 of 5"type = TYPE.Standard2of5; break;
        case "Standard 2 of 5 Mod 10"type = TYPE.Standard2of5_Mod10; break;
        case "Code 128"type = TYPE.CODE128; break;
        case "Code 128-A"type = TYPE.CODE128A; break;
        case "Code 128-B"type = TYPE.CODE128B; break;
        case "Code 128-C"type = TYPE.CODE128C; break;
        case "Telepen"type = TYPE.TELEPEN; break;
        case "FIM"type = TYPE.FIM; break;
        case "Pharmacode"type = TYPE.PHARMACODE; break;
        default: MessageBox.Show("Please specify the encoding type."); break;
    }//switch

    try
    {
        if (type != TYPE.UNSPECIFIED)
        {
            try
            {
                b.BarWidth = textBoxBarWidth.Text.Trim().Length < 1 ? null : (int?)Convert.ToInt32(textBoxBarWidth.Text.Trim());
            }
            catch (Exception ex)
            {
                throw new Exception("Unable to parse BarWidth: " + ex.Message, ex);
            }
            try
            {
                b.AspectRatio = textBoxAspectRatio.Text.Trim().Length < 1 ? null : (double?)Convert.ToDouble(textBoxAspectRatio.Text.Trim());
            }
            catch (Exception ex)
            {
                throw new Exception("Unable to parse AspectRatio: " + ex.Message, ex);
            }

            b.IncludeLabel = this.chkGenerateLabel.Checked;
            b.RotateFlipType = (RotateFlipType)Enum.Parse(typeof(RotateFlipType), this.cbRotateFlip.SelectedItem.ToString(), true);

            if (!String.IsNullOrEmpty(this.textBox1.Text.Trim()))
                b.AlternateLabel = this.textBox1.Text;
            else
                b.AlternateLabel = this.txtData.Text;

            //label alignment and position
            switch (this.cbLabelLocation.SelectedItem.ToString().Trim().ToUpper())
            {
                case "BOTTOMLEFT":  b.LabelPosition = LabelPositions.BOTTOMLEFT; break;
                case "BOTTOMRIGHT": b.LabelPosition = LabelPositions.BOTTOMRIGHT; break;
                case "TOPCENTER": b.LabelPosition = LabelPositions.TOPCENTER; break;
                case "TOPLEFT": b.LabelPosition = LabelPositions.TOPLEFT; break;
                case "TOPRIGHT": b.LabelPosition = LabelPositions.TOPRIGHT; break;
                default: b.LabelPosition = LabelPositions.BOTTOMCENTER; break;
            }//switch

            //===== Encoding performed here =====
            barcode.BackgroundImage = b.Encode(typethis.txtData.Text.Trim(), this.btnForeColor.BackColor, this.btnBackColor.BackColor, W, H);
            //===================================

            //show the encoding time
            this.lblEncodingTime.Text = "(" + Math.Round(b.EncodingTime, 0, MidpointRounding.AwayFromZero).ToString() + "ms)";

            txtEncoded.Text = b.EncodedValue;

            tsslEncodedType.Text = "Encoding Type: " + b.EncodedType.ToString();

            // Read dynamically calculated Width/Height because the user is interested.
            if (b.BarWidth.HasValue)
                txtWidth.Text = b.Width.ToString();
            if (b.AspectRatio.HasValue)
                txtHeight.Text = b.Height.ToString();
        }//if
        //reposition the barcode image to the middle
        barcode.Location = new Point((this.barcode.Location.X + this.barcode.Width / 2) - barcode.Width / 2, (this.barcode.Location.Y + this.barcode.Height / 2) - barcode.Height / 2);
    }//try
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }//catch
}//btnEncode_Click

版权和许可

Apache-2.0 License

开源地址

https://github.com/barnhill/barcodelib


转自:my.oschina.net

链接:my.oschina.net/u/135083/blog/4934094

- EOF -

推荐阅读  点击标题可跳转
.NET 7 预览版来啦,我升级体验了.NET 中更方便地模拟 Http 响应.NET Core 中自定义认证实现

看完本文有收获?请转发分享给更多人

推荐关注「DotNet」,提升.Net技能 

点赞和在看就是最大的支持❤️

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存