C#生成Code39条形码而非条形码字体的方法

由于Code39编译简单、能够对任意长度的数据进行编码、支持设备比较广泛所以被广泛的采用,下面介绍下C#生成Code39条形码而非条形码字体的方法,需要的朋友可以参考下

由于Code39编译简单、能够对任意长度的数据进行编码、支持设备比较广泛所以被广泛的采用,下面通过文字说明和代码分析给大家介绍下C#生成Code39条形码而非条形码字体的方法。

能够对任意长度的数据进行编码。其局限在于印刷品的长度和条码阅读器的识别范围。
支持设备广泛。目前几乎所有的条形码阅读设备都能阅读Code39码,打印机也是同样情况。
编制简单。简单的开发技术就能快速生成相应的编码图像。
一般Code39码由5条线和分开它们的4条缝隙共9个元素构成。线和缝隙有宽窄之分,而且无论线还是缝隙仅有3个比其他的元素要宽一定比例。39码因此得名
Code39条形码规则

  1、 每五条线表示一个字符;
  2、 粗线表示1,细线表示0;
  3、 线条间的间隙宽的表示1,窄的表示0;
  4、 五条线加上它们之间的四条间隙就是九位二进制编码,而且这九位中必定有三位是1,所以称为39码;
  5、 条形码的首尾各一个 * 标识开始和结束。
Code 39只接受如下43个有效输入字符:
  1、26个大写字母(A - Z),
  2、十个数字(0 - 9),
  3、连接号(-),句号(.),空格,美圆符号($),斜扛(/),加号(+)以及百分号(%)。
     4、其余的输入将被忽略。
  5、code39通常情况下不需要校验码。但是对於精确度要求高的应用,需要在code39条形码後面增加一个校验码。
条形码的生成网上也有很多库文件,做的特别好的都是商业授权。一维码二维码在.net开源项目中的生成读取比较知名的有:Zxing.net(http://zxingnet.codeplex.com/)、BarcodeLib等
但有些时候开源软件所实现的并不满足当下的需求,所以还要做一些其他尝试。效果如下图:

 代码分享:

/// <summary>/// Code39一维码生成类/// http://www.cnblogs.com/bluescreen/p/4689351.html/// </summary>public class CSharpCode39{#region 数据码private byte[,] c39_bp = new byte[,] { { 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x31, 0x30, 0x30 }, { 0x31, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31 }, { 0x32, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31 }, { 0x33, 0x31, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30 }, { 0x34, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x31 }, { 0x35, 0x31, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30 }, { 0x36, 0x30, 0x30, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30 }, { 0x37, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x31 }, { 0x38, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30 }, { 0x39, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30 }, { 0x41, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31 }, { 0x42, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31 }, { 0x43, 0x31, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30 }, { 0x44, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x31 }, { 0x45, 0x31, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30 }, { 70, 0x30, 0x30, 0x31, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30 }, { 0x47, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x31 }, { 0x48, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30 }, { 0x49, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x31, 0x30, 0x30 }, { 0x4a, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x30, 0x30 }, { 0x4b, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31 }, { 0x4c, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31 }, { 0x4d, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30 }, { 0x4e, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x31 }, { 0x4f, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30 }, { 80, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30 }, { 0x51, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31 }, { 0x52, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30 }, { 0x53, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x31, 0x30 }, { 0x54, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x31, 0x30 }, { 0x55, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31 }, { 0x56, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31 }, { 0x57, 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 }, { 0x58, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31 }, { 0x59, 0x31, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30 }, { 90, 0x30, 0x31, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30 }, { 0x2d, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31 }, { 0x2e, 0x31, 0x31, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30 }, { 0x20, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30, 0x30 }, { 0x2a, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30 }, { 0x24, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30 }, { 0x2f, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30 }, { 0x2b, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30 }, { 0x25, 0x30, 0x30, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30 }};//code39合法字符集 [0-9A-Z+-*/%. ] 共43个private byte[] c39_cw = new byte[] { 0x30, 0x31, 50, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 70, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 80, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 90, 0x2d, 0x2e, 0x20, 0x24, 0x2f, 0x2b, 0x25};private byte[,] c39_ex = new byte[,] { { 1, 0x24, 0x41 }, { 2, 0x24, 0x42 }, { 3, 0x24, 0x43 }, { 4, 0x24, 0x44 }, { 5, 0x24, 0x45 }, { 6, 0x24, 70 }, { 7, 0x24, 0x47 }, { 8, 0x24, 0x48 }, { 9, 0x24, 0x49 }, { 10, 0x24, 0x4a }, { 11, 0x24, 0x4b }, { 12, 0x24, 0x4c }, { 13, 0x24, 0x4d }, { 14, 0x24, 0x4e }, { 15, 0x24, 0x4f }, { 0x10, 0x24, 80 }, { 0x11, 0x24, 0x51 }, { 0x12, 0x24, 0x52 }, { 0x13, 0x24, 0x53 }, { 20, 0x24, 0x54 }, { 0x15, 0x24, 0x55 }, { 0x16, 0x24, 0x56 }, { 0x17, 0x24, 0x57 }, { 0x18, 0x24, 0x58 }, { 0x19, 0x24, 0x59 }, { 0x1a, 0x24, 90 }, { 0x1b, 0x25, 0x41 }, { 0x1c, 0x25, 0x42 }, { 0x1d, 0x25, 0x43 }, { 30, 0x25, 0x44 }, { 0x1f, 0x25, 0x45 }, { 0x3b, 0x25, 70 }, { 60, 0x25, 0x47 }, { 0x3d, 0x25, 0x48 }, { 0x3e, 0x25, 0x49 }, { 0x3f, 0x25, 0x4a }, { 0x5b, 0x25, 0x4b }, { 0x5c, 0x25, 0x4c }, { 0x5d, 0x25, 0x4d }, { 0x5e, 0x25, 0x4e }, { 0x5f, 0x25, 0x4f }, { 0x7b, 0x25, 80 }, { 0x7c, 0x25, 0x51 }, { 0x7d, 0x25, 0x52 }, { 0x7e, 0x25, 0x53 }, { 0x7f, 0x25, 0x54 }, { 0, 0x25, 0x55 }, { 0x40, 0x25, 0x56 }, { 0x60, 0x25, 0x57 }, { 0x21, 0x2f, 0x41 }, { 0x22, 0x2f, 0x42 }, { 0x23, 0x2f, 0x43 }, { 0x26, 0x2f, 70 }, { 0x27, 0x2f, 0x47 }, { 40, 0x2f, 0x48 }, { 0x29, 0x2f, 0x49 }, { 0x2a, 0x2f, 0x4a }, { 0x2c, 0x2f, 0x4c }, { 0x3a, 0x2f, 90 }, { 0x61, 0x2b, 0x41 }, { 0x62, 0x2b, 0x42 }, { 0x63, 0x2b, 0x43 }, { 100, 0x2b, 0x44 }, { 0x65, 0x2b, 0x45 }, { 0x66, 0x2b, 70 }, { 0x67, 0x2b, 0x47 }, { 0x68, 0x2b, 0x48 }, { 0x69, 0x2b, 0x49 }, { 0x6a, 0x2b, 0x4a }, { 0x6b, 0x2b, 0x4b }, { 0x6c, 0x2b, 0x4c }, { 0x6d, 0x2b, 0x4d }, { 110, 0x2b, 0x4e }, { 0x6f, 0x2b, 0x4f }, { 0x70, 0x2b, 80 }, { 0x71, 0x2b, 0x51 }, { 0x72, 0x2b, 0x52 }, { 0x73, 0x2b, 0x53 }, { 0x74, 0x2b, 0x54 }, { 0x75, 0x2b, 0x55 }, { 0x76, 0x2b, 0x56 }, { 0x77, 0x2b, 0x57 }, { 120, 0x2b, 0x58 }, { 0x79, 0x2b, 0x59 }, { 0x7a, 0x2b, 90 }};#endregion#region 字段和属性private bool _checksum;private string _dataToEncode;private bool _humanReadable;private string _humanReadableFont;private float _humanReadableSize;private float _marginX;private float _marginY;private float _moduleHeight;private float _moduleWidth;private float _ratio;private float _reduction;private Color _codeBarColor = Color.Black;private bool _isDisplayCheckCode;private string _checkData;private bool _isDisplayStartStopSign;/// <summary>/// 是否检查效验/// </summary>public bool Checksum{get{return _checksum;}set{_checksum = value;}}/// <summary>/// 要进行编码的数据/// </summary>public string DataToEncode{get{return _dataToEncode;}set{_dataToEncode = value;}}/// <summary>/// 是否显示文本内容/// </summary>public bool HumanReadable{get{return _humanReadable;}set{_humanReadable = value;}}/// <summary>/// 用于显示文本内容的字体/// </summary>public string HumanReadableFont{get{return _humanReadableFont;}set{_humanReadableFont = value;}}/// <summary>/// 用于显示文本内容文字的代大小 /// </summary>public float HumanReadableSize{get{return _humanReadableSize;}set{_humanReadableSize = value;}}/// <summary>/// 水平方向边距/// 水平方向建议尽量留白/// 如果没有留白同时模块宽度较小可能会造成无法识别/// </summary>public float MarginX{get{return _marginX;}set{_marginX = value;}}/// <summary>/// 垂直方向边距/// </summary>public float MarginY{get{return _marginY;}set{_marginY = value;}}/// <summary>/// 模块高度(mm)/// </summary>public float ModuleHeight{get{return _moduleHeight;}set{_moduleHeight = value;}}/// <summary>/// 模块宽度(mm)/// 模块宽度不应低于0.2646f/// 模块宽度过低会造成数据丢失因而读不出数据或者会误读/// </summary>public float ModuleWidth{get{return _moduleWidth;}set{_moduleWidth = value;}}/// <summary>/// 放大比率 /// </summary>public float Ratio{get{return _ratio;}set{_ratio = value;}}/// <summary>/// 缩小/// </summary>public float Reduction{get{return _reduction;}set{_reduction = value;}}/// <summary>/// 设置条形码的颜色/// </summary>public Color CodeBarColor{get{return _codeBarColor;}set{_codeBarColor = value;}}/// <summary>/// 是否显示效验码/// 此属性要在Checksum属性为true的情况下有用/// </summary>public bool IsDisplayCheckCode{get { return this._isDisplayCheckCode; }set { this._isDisplayCheckCode = value; }}/// <summary>/// 供人识别是否显示起止符/// </summary>public bool IsDisplayStartStopSign{get { return this._isDisplayStartStopSign; }set { this._isDisplayStartStopSign = value; }}#endregion/// <summary>/// 默认构造函数/// 初始化/// </summary>public CSharpCode39(){this.initData();}public CSharpCode39(string dataToEncode){this.initData();this._dataToEncode = dataToEncode;}/// <summary>/// 默认构造函数/// 初始化数据/// </summary>private void initData(){this._humanReadableFont = "Arial";this._humanReadableSize = 10f;this._codeBarColor = Color.Black;this._moduleHeight = 15f;//模块高度毫米this._moduleWidth = 0.35f;//模块宽度毫米this._ratio = 3f;this._marginX =2;this._marginY =2;this._checksum = true;this._isDisplayCheckCode = false;this._isDisplayStartStopSign = false;}private char[] _bitpattern_c39(string rawdata, ref int finalLength){//0x27 39 //0x50 80if ((rawdata.Length == 0) || (rawdata.Length > 0x50 /*0x27*/)){return null;}for (int i = 0; i < rawdata.Length; i++){if ((rawdata[i] == '\0') || (rawdata[i] > '\x007f')){return null;}}byte[] data = processTilde(rawdata);if (data.Length == 0){return null;}byte[] buffer2 = this.processExtended(data);if ((buffer2.Length == 0) || (buffer2.Length > /*40*/80)){return null;}finalLength = this._checksum ? ((buffer2.Length + 2) + 1) : (buffer2.Length + 2);return this.getPattern_c39(buffer2);}/// <summary>/// 计算效验值/// </summary>/// <param name="data"></param>/// <param name="len"></param>/// <returns></returns>private byte _checksum_c39(byte[] data, int len){//0x2b 43//字符值的总和除以合法字符集的个数43 取余数 余数在合法字符数组中对应的数值就是效验值int num2 = 0;for (int i = 1; i < len; i++){num2 += this.valueFromCharacter(data[i]);}return this.c39_cw[num2 % 0x2b];}private char[] Code39_bitpattern(string dataToEncode){int finalLength = 0;return this._bitpattern_c39(dataToEncode, ref finalLength);}/// <summary>/// 获得Code39条码图片/// </summary>/// <param name="resolution">DPI</param>/// <returns></returns>public Bitmap getBitmapImage(float resolution){return Code39_createCode(resolution);}private Bitmap Code39_createCode(float resolution){int num6;int finalLength = 0;char[] chArray = this._bitpattern_c39(DataToEncode, ref finalLength);if (chArray == null){return null;}float fontsize = this._humanReadable ? (0.3527778f * this._humanReadableSize) : 0f;// float num3 = (7f * ModuleWidth) + ((3f * Ratio) * ModuleWidth);float num3 = (7f * this._moduleWidth) + ((3f * this._ratio) * this._moduleWidth);float width = (finalLength * num3) + (2f * this._marginX);float height = (this._moduleHeight + (2f * this._marginY)) + fontsize;width *= resolution / 25.4f;height *= resolution / 25.4f;Bitmap image = new Bitmap((int)width, (int)height, PixelFormat.Format32bppPArgb);image.SetResolution(resolution, resolution);//image.SetResolution(300, 300);Graphics g = Graphics.FromImage(image);g.Clear(Color.White);g.PageUnit = GraphicsUnit.Millimeter; //以毫米为度量单位g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, /*(int)width*/image.Width, /*(int)height*/image.Height));//new Pen(Color.Black, 2f);//new SolidBrush(Color.White);SolidBrush brush = new SolidBrush(Color.Black);if (resolution < 300f){//g.TextRenderingHint = TextRenderingHint.AntiAlias;//g.SmoothingMode = SmoothingMode.AntiAlias;g.CompositingQuality = CompositingQuality.HighQuality;//g.SmoothingMode = SmoothingMode.HighQuality;g.InterpolationMode = InterpolationMode.HighQualityBicubic;g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;}float num7 = 0f;for (num6 = 0; num6 < chArray.Length; num6++){if (chArray[num6] == '0'){if ((num6 & 1) != 1){RectangleF rect = new RectangleF(MarginX + num7, MarginY, ModuleWidth, ModuleHeight);MakeBar(g, rect, Reduction);}num7 += 1f * ModuleWidth;}else{if ((num6 & 1) != 1){RectangleF ef2 = new RectangleF(MarginX + num7, MarginY, Ratio * ModuleWidth, ModuleHeight);MakeBar(g, ef2, Reduction);}num7 += Ratio * ModuleWidth;}}#region 供人识别内容if (this._humanReadable){#region 保留/*byte[] buffer2 = processTilde(this._dataToEncode);int index = 0;List<byte> arr = new List<byte>();for (num6 = 0; num6 < buffer2.Length; num6++){//0x20 32  0x7e 126if ((buffer2[num6] >= 0x20) && (buffer2[num6] <= 0x7e)){arr.Add(buffer2[num6]);}}byte[] bytes = new byte[arr.Count];for (int i = 0; i < arr.Count; i++){bytes[i] = arr[i];}index = arr.Count;//string text = new ASCIIEncoding().GetString(bytes, 0, index);*/ #endregionstring text = this._dataToEncode;if (this._isDisplayCheckCode&&!string.IsNullOrEmpty(this._checkData)) {text += this._checkData;}if (this._isDisplayStartStopSign){text = "*" + text + "*";}Font font = new Font(this._humanReadableFont, this._humanReadableSize);//g.DrawString(text, font, brush, new PointF(MarginX, MarginY + ModuleHeight));//新增字符串格式var drawFormat = new StringFormat { Alignment = StringAlignment.Center };float inpix = image.Width / resolution;//根据DPi求出 英寸数float widthmm = inpix * 25.4f; //有每英寸像素求出毫米//g.DrawString(text, font, Brushes.Black, width / 2, height - 14, drawFormat);g.DrawString(text, font, /*Brushes.Black*/brush, new PointF(/*MarginX*/(int)(widthmm / 2), MarginY + ModuleHeight + 1), drawFormat);}#endregionreturn image;}/// <summary>/// 进行图形填充/// </summary>/// <param name="g"></param>/// <param name="rect"></param>/// <param name="reduction"></param>private void MakeBar(Graphics g, RectangleF rect, float reduction){MakeBar(g, rect, reduction,this._codeBarColor);}/// <summary>/// 进行图形填充/// </summary>/// <param name="g"></param>/// <param name="rect"></param>/// <param name="reduction"></param>/// <param name="brushColor"></param>private void MakeBar(Graphics g, RectangleF rect, float reduction, Color brushColor){float num = rect.Width * (reduction / 200f);float num2 = rect.Width - (rect.Width * (reduction / 200f));RectangleF ef = new RectangleF{X = rect.X + num,Y = rect.Y,Width = num2,Height = rect.Height};SolidBrush brush = new SolidBrush(brushColor);g.FillRectangle(brush, ef);}private char[] getPattern_c39(byte[] data){ //0x2a 42为*//int num = 0x27;int num = 80;byte[] buffer = new byte[num + 1];buffer[0] = 0x2a;int index = 1;for (int i = 0; i < data.Length; i++){buffer[index] = data[i];index++;}if (Checksum){buffer[index] = this._checksum_c39(buffer, index);if (_isDisplayCheckCode){this._checkData = ((char)buffer[index]).ToString();}index++;}buffer[index] = 0x2a;index++;char[] chArray = new char[index * 10];int num5 = 0;for (int j = 0; j < index; j++){byte c = buffer[j];int num9 = this.indexFromCharacter(c);for (int k = 0; k < 9; k++){chArray[num5] = (char)this.c39_bp[num9, k + 1];num5++;}chArray[num5] = '0';num5++;}return chArray;}private int indexFromCharacter(byte c){//0x2c==44for (int i = 0; i < 0x2c; i++){if (this.c39_bp[i, 0] == c){return i;}}return -1;}private byte[] processExtended(byte[] data){//0x25 38//0x4F 79 0x4E 78//int num = 0x4F;int num = data.Length - 1;byte[] sourceArray = new byte[num + 1];int index = 0;for (int i = 0; i < data.Length; i++){byte c = data[i];if (this.valueFromCharacter(c) != -1){sourceArray[index] = c;index++;}else{byte num5 = 0;byte num6 = 0;if (this.valuesFromExtended(c, ref num5, ref num6)){sourceArray[index] = num5;sourceArray[index + 1] = num6;index += 2;}}}byte[] destinationArray = new byte[index];Array.Copy(sourceArray, destinationArray, index);return destinationArray;}/// <summary>/// 返回指定字符在code39合法字符数组中对应的索引/// </summary>/// <param name="c"></param>/// <returns></returns>private int valueFromCharacter(byte c){//c39_cw为数组,保存的为合法的字符集信息[0-9A-Z+-*/%. ] 共43个//如果存在这个字符就返回c39_cw对应的索引for (int i = 0; i < /*0x2b*/this.c39_cw.Length; i++){if (this.c39_cw[i] == c){return i;}}return -1;}/// <summary>/// 判断字符集是否存在Extended/// </summary>/// <param name="c"></param>/// <param name="v1"></param>/// <param name="v2"></param>/// <returns></returns>private bool valuesFromExtended(byte c, ref byte v1, ref byte v2){//0x55 85for (int i = 0; i < 0x55; i++){if (this.c39_ex[i, 0] == c){v1 = this.c39_ex[i, 1];v2 = this.c39_ex[i, 2];return true;}}return false;}private byte[] processTilde(string rawdata){byte[] sourceArray = new byte[rawdata.Length];int index = 0;for (int i = 0; i < rawdata.Length; i++){if (rawdata[i] != '~'){sourceArray[index] = (byte)rawdata[i];index++;}else if ((i + 3) < rawdata.Length){string str = new string(new char[] { rawdata[i + 1], rawdata[i + 2], rawdata[i + 3] });int num3 = Convert.ToInt32(str, 10);if ((num3 > 0) && (num3 <= 0xff)){sourceArray[index] = (byte)num3;index++;}if (num3 == 0x3e7){sourceArray[index] = 0x86;index++;}i += 3;}else{sourceArray[index] = (byte)rawdata[i];index++;}}byte[] destinationArray = new byte[index];Array.Copy(sourceArray, destinationArray, index);return destinationArray;}}

这个方法是根据DPI以及数据模块的高宽来确定条码的实际高宽。模块的宽度以毫米(mm)来算。类中的getBitmapImage方法的一个参数getBitmapImage为DPI。安卓用户安装平时常用的扫码软件即可做识别测试。就识别率来说还是可以的,扫描枪绝对是可以扫的出的。同时使用过MessagingToolkit.Barcode进行解码测试,万张无一误读。

C#生成Code39条形码而非条形码字体的方法相关推荐

  1. 网页设计师的字体替换方法指南

    写在这篇文章之前:中文网页字体的窘境 在国外的设计师幸福地讨论着如何不用图片进行字体替换时,当Google Proudly地提供越来越多的web fonts时,使用中文的网页设计师只能发出一声叹息.中 ...

  2. 生成二维码与条形码的各种方法

    二维码 方法1:将网址生成二维码的API调用接口 http://pan.baidu.com/share/qrcode?w=150&h=150&url=http://www.54admi ...

  3. zxing详细使用说明 java生成二维码、条形码

    zxing详细使用 一.引用maven依赖 二.生成条形码 1.生成二维码基本使用 2.`BarcodeFormat` (条形码类型) 3.`EncodeHintType`(条形码自定义属性) 4.` ...

  4. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第12波-快速生成、读取、导出条形码二维码...

    根据指定的内容生成对应的条形码或二维码,在如今移动互联网时代,并不是一件什么新鲜事,随便百度一下,都能找到好多的软件或在线网站可以帮我们做到,但细想一下,如果很偶然地只是生成一个两这样的图形,百度一下 ...

  5. Java生成二维码或条形码

    分享一个工具类,用来生成条形码以及二维码的 注意条形码的条码内容 必须是0~9的数字,且位数在11~12 具体工具类代码如下: import com.google.zxing.BarcodeForma ...

  6. 一句代码生成二维码,一句代码生成条形码,批量生成二维码和条形码,步骤教学

    生产企业或者物流快递需要用到大量的二维码和条形码,但是要自行编写代码批量生成二维码或者条形码并不容易,涉及的知识面很广. Excel插件<E灵>提供了二维码接口和条形码接口,您只需要一句代 ...

  7. php+条形码在线怎么生成,PHP_php实现在线生成条形码示例分享(条形码生成器),复制代码 代码如下:  n - phpStudy...

    php实现在线生成条形码示例分享(条形码生成器) define('IN_CB',true); include('header.php'); $keys = array('0','1','2','3', ...

  8. ZXing 生成二维码和条形码

    今天,做项目需要使用条形码扫描枪扫描二维码,以后后续手动生成二维码和条形码.看了一下,同事写的例子以及自己在网上查看了一下源码,至于源码怎么搞的,没看,直接上使用功能! Step1:下载地址:http ...

  9. Zxing 生成二维码和条形码去掉白边

    源码下载: https://github.com/AndroidZmm123/ZxingApplication 需求:根据输入内容,生成条形码或者二维码. 我们大多数会选择Zxing.因为jar包较小 ...

  10. 【Demo】 生成二维码 和 条形码

    为什么80%的码农都做不了架构师?>>>    条形码 和 二维码 对比 一维条形码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于 ...

最新文章

  1. docker逃逸漏洞复现 cve-2019-5736
  2. Python网络爬虫--BeautifulSoup库的基本元素
  3. 通俗的说下浏览器的渲染过程
  4. 一个医院院长电视机坏了,拿到一个大修理店去修
  5. 剑指offer之重建二叉树
  6. Swift 的函数和闭包
  7. 机器学习的一些注意事项
  8. mysql 临时索引_MYSQL临时表创建索引
  9. 深度学习可解释性!深度taylor分解
  10. android calendarview 单月显示博客,android CalendarView
  11. NLP简报(Issue#7)
  12. wince系统usb刷机工具_中兴B860AV1.2-S905L刷机救砖教程,喜欢的分享一下
  13. LeetCode 55 - 跳跃游戏
  14. 在进行ISO14001认证审核之前,需要注意什么?
  15. idea注册账号_【Meta分析】Meta分析该不该注册?如何注册?什么时候注册?
  16. pyserial的踩坑记录
  17. 基于C++实现DBSCAN聚类算法
  18. ios 画带有箭头的线_iOS 箭头类型视图的几点心得
  19. Windows常见基本进程三:dumprep or dumprep进程(Dump Reporting Tool启动项)
  20. wifi密码公式计算机,求一些高数公式,做wifi密码用?

热门文章

  1. 【重要】股票收益互换
  2. 【iOS与EV3混合机器人编程系列之一】iOS要干嘛?EV3可以更酷!
  3. linux SCALA 安装及环境配置
  4. java application.doevents_Application.DoEvents()笔记
  5. macbook硬盘读写速度测试(Disk Speed Test 测速贴图)
  6. SPSS中常用的几种t检验实例操作
  7. fences(桌面整理软件)与eDiary3.3.3下载链接
  8. Bootstrap横屏后竖屏
  9. 学UG编程,首先要学习什么?那些编程都是操机操出来的吗?
  10. envi 监督分类超详细过程