using System;using System.Collections.Generic;using System.Text;using System.Drawing;
namespace CjLibrary{
public class CjBarCode39 : CjBarCode {
private double wideToNarrowRatio = 3.0;
public double WideToNarrowRatio { get { return wideToNarrowRatio; } set { wideToNarrowRatio = value; } } private int weight = 1;
public int Weight { get { return weight; } set { weight = value; } } /// <summary> /// 39条码中能使用的字符 /// </summary> private String alphabet39 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*";
private String[] coded39Char = { /* 0 */ "001100100", /* 1 */ "100010100", /* 2 */ "010010100", /* 3 */ "110000100", /* 4 */ "001010100", /* 5 */ "101000100", /* 6 */ "011000100", /* 7 */ "000110100", /* 8 */ "100100100", /* 9 */ "010100100", /* A */ "100010010", /* B */ "010010010", /* C */ "110000010", /* D */ "001010010", /* E */ "101000010", /* F */ "011000010", /* G */ "000110010", /* H */ "100100010", /* I */ "010100010", /* J */ "001100010", /* K */ "100010001", /* L */ "010010001", /* M */ "110000001", /* N */ "001010001", /* O */ "101000001", /* P */ "011000001", /* Q */ "000110001", /* R */ "100100001", /* S */ "010100001", /* T */ "001100001", /* U */ "100011000", /* V */ "010011000", /* W */ "110001000", /* X */ "001011000", /* Y */ "101001000", /* Z */ "011001000", /* - */ "000111000", /* . */ "110000100", /*' '*/ "011000100", /* $ */ "010101000", /* / */ "010100010", /* + */ "010001010", /* % */ "100101000", /* * */ "001101000" }; public CjBarCode39() { BarcodeText = "1234"; } /// <summary> /// 为了使得条形码居中先要计算条形码的Left和Top坐标 /// </summary> /// <returns></returns> private int getX() { int currentLocation = 0; string strBarcode = "*" + BarcodeText.ToUpper() + "*"; for (int i = 0; i < strBarcode.Length; i++) { string encodedString = coded39Char[alphabet39.IndexOf(strBarcode[i])];
for (int j = 0; j < 5; j++) {
if (encodedString[j] == '0') { currentLocation += weight; } else { currentLocation += 3 * weight; } //画第6个 5 白条 if ((j + 5) < 9) { if (encodedString[j + 5] == '0') { currentLocation += weight; } else { currentLocation += 3 * weight; } } } currentLocation += weight; } return currentLocation; } /// <summary> /// 显示条形码 /// </summary> /// <param name="g">GDI+</param> /// <param name="rects">画图区域</param> protected override void DrawBitmap(Graphics g, Rectangle rects) { if (BarcodeText == "") return; string strBarcode = "*" + BarcodeText.ToUpper() + "*"; //string strBarcode = BarcodeText.ToUpper() ; String encodedString = ""; int currentLocation =(rects.Width- getX())/2; SolidBrush blackBrush = new SolidBrush(Color.Black); SolidBrush witeBrush = new SolidBrush(Color.White); int yTop = rects.Y; for (int i = 0; i < strBarcode.Length; i++) { encodedString = coded39Char[alphabet39.IndexOf(strBarcode[i])];
for (int j = 0; j < 5; j++) {
if (encodedString[j] == '0') { Rectangle re1 = new Rectangle(currentLocation, yTop, weight, BarcodeHeight); g.FillRectangle(blackBrush, re1); currentLocation += weight; } else { Rectangle re1 = new Rectangle(currentLocation, yTop, 3 * weight, BarcodeHeight); g.FillRectangle(blackBrush, re1); currentLocation += 3 * weight; } //画第6个 5 白条 if ((j + 5) < 9) { if (encodedString[j + 5] == '0') { Rectangle re1 = new Rectangle(currentLocation, yTop, weight, BarcodeHeight); g.FillRectangle(witeBrush, re1); currentLocation += weight; } else { Rectangle re1 = new Rectangle(currentLocation, yTop, 3 * weight, BarcodeHeight); g.FillRectangle(witeBrush, re1); currentLocation += 3 * weight; } } } Rectangle re2 = new Rectangle(currentLocation, yTop, weight, BarcodeHeight);