绘制条形码

    技术2022-05-19  19

    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); 


    最新回复(0)