项目已经到了尾声了,开发业快完了,拿到正是的条码纸和碳带,开打,加了'-'的128码,读取得速度不是很快,也不是很好读,因为是使用生成条码图片的方式打印,看来还是有问题,之前用过指令直接打印,条码倒是读的快,但是其他的文字的大小不可控,放弃了。
现在有找到个好方法,就是是用128字体来打印。当然还没测试读取的效果,先把方法贴上,明天去测试速度。
有两种转换128码的方式,有待明天测试......
方式A:
1 private string StringToCode128(string String) 2 { 3 try 4 { 5 char endChar = (char)0; 6 Int64 total = 104; 7 int tmp; 8 Int64 endAsc; 9 for (int i = 0; i < String.Length; i++) 10 { 11 tmp = (int)(Convert.ToChar(String.Substring(i, 1))); 12 if (tmp >= 32) 13 { 14 total += (tmp - 32) * (i + 1); 15 } 16 else 17 { 18 total += (tmp + 64) * (i + 1); 19 } 20 } 21 endAsc = total % 103; 22 if (endAsc >= 95) 23 { 24 switch (endAsc) 25 { 26 case 95: 27 endChar = '?'; 28 break; 29 case 96: 30 endChar = '?'; 31 break; 32 case 97: 33 endChar = '?'; 34 break; 35 case 98: 36 endChar = '?'; 37 break; 38 case 99: 39 endChar = '?'; 40 break; 41 case 100: 42 endChar = 'è'; 43 break; 44 case 101: 45 endChar = 'é'; 46 break; 47 case 102: 48 endChar = 'ê'; 49 break; 50 } 51 } 52 else 53 { 54 endAsc += 32; 55 endChar = (char)endAsc; 56 } 57 return "ì" + String + endChar.ToString() + "?"; 58 59 } 60 catch (Exception ex) 61 { 62 MessageBox.Show("Error:" + ex.Message); 63 return string.Empty; 64 } 65 66 }
方法B:
1 private string Get128CodeString(string inputData) 2 { 3 string result; 4 int checksum = 104; 5 for (int ii = 0; ii < inputData.Length; ii++) 6 { 7 if (inputData[ii] >= 32) 8 { 9 checksum += (inputData[ii] - 32) * (ii + 1); 10 } 11 else 12 { 13 checksum += (inputData[ii] + 64) * (ii + 1); 14 } 15 } 16 checksum = checksum % 103; 17 if (checksum < 95) 18 { 19 checksum += 32; 20 } 21 else 22 { 23 checksum += 100; 24 } 25 result = Convert.ToChar(204) + inputData.ToString() + Convert.ToChar(checksum) + Convert.ToChar(206); 26 return result; 27 }
Font ft_BarCode = new System.Drawing.Font("Code 128", 43, FontStyle.Regular, GraphicsUnit.World); Font ft1 = new System.Drawing.Font("Times New Roman", 14, FontStyle.Regular, GraphicsUnit.World); gB.DrawString(Get128CodeString(this.gridView1.GetRowCellValue(e.RowHandle, "BARCODE").ToString()), ft_BarCode, b1, new Point(40, 138));// new Rectangle(40, 138, 230, 40)); gB.DrawString("*"+this.gridView1.GetRowCellValue(e.RowHandle, "BARCODE").ToString()+"*", new Font(this.Font.FontFamily, 10, FontStyle.Regular), b1, new Point(100, 177));// new Rectangle(80, 180, 230, 20));