开源项目barcodelib-C#条形码图像生成库

DotNetCore实战

共 6981字,需浏览 14分钟

 ·

2021-07-10 14:32


介绍

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

用法

该库包含一个名为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, 290, 120);
 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(type, this.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




往期精彩回顾




【推荐】.NET Core开发实战视频课程 ★★★

.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

【.NET Core微服务实战-统一身份认证】开篇及目录索引

Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)

.NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

10个小技巧助您写出高性能的ASP.NET Core代码

用abp vNext快速开发Quartz.NET定时任务管理界面

在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

现身说法:实际业务出发分析百亿数据量下的多表查询优化

关于C#异步编程你应该了解的几点建议

C#异步编程看这篇就够了


浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报