Search code examples
c#asp.netbarcodebarcode-scannerbarcode-printing

Create 2 digit barcode for IDAutomationHC39M but not scanning


I am trying to generating IDAutomationHC39M for number 50 or 51 the barcode for that gets generated but on scanning I am not able to get the Detail number for that.

Same way I am able to create the barcode for 14757 and in that case I am able to scan that barcode properly.

How should I scan 2 digit generated Barcodes.

Is there some thing I am doing wrong in below code.

public void generateBarcode(int id)
    {
        if (plBarCode != null)
        {
            string barCode = "";

            barCode = Convert.ToString(id);
            System.Web.UI.WebControls.Image imgBarCode = new System.Web.UI.WebControls.Image();
            using (Bitmap bitMap = new Bitmap(barCode.Length * 70, 70))
            {
                using (Graphics graphics = Graphics.FromImage(bitMap))
                {
                    Font oFont = new Font("IDAutomationHC39M", 30);
                    PointF point = new PointF(2f, 2f);
                    SolidBrush blackBrush = new SolidBrush(Color.Black);
                    SolidBrush whiteBrush = new SolidBrush(Color.White);
                    graphics.FillRectangle(whiteBrush, 0, 0, bitMap.Width, bitMap.Height);                       
                    int w = barCode.Length * 40;                    
                    Graphics oGraphics = Graphics.FromImage(bitMap);                    
                    PointF oPoint = new PointF(2f, 2f);
                    SolidBrush oBrushWrite = new SolidBrush(Color.Black);
                    SolidBrush oBrush = new SolidBrush(Color.White);         
                    oGraphics.FillRectangle(oBrush, 0, 0, w, 100);                       
                    oGraphics.DrawString("*" + barCode + "*", oFont, oBrushWrite, oPoint);

                }
                using (MemoryStream ms = new MemoryStream())
                {
                    bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    byte[] byteImage = ms.ToArray();

                    Convert.ToBase64String(byteImage);
                    imgBarCode.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteImage);
                }
                plBarCode.Controls.Add(imgBarCode);
            }
        }

    }

Generated the below barcode with number 56 and also removed * from the passing string still on scanning not returning the data 56.

enter image description here


Solution

  • Use this modified code.

    public void generateBarcode(string id)
    {
                    int w = id.Length * 55;
    
                    // Create a bitmap object of the width that we calculated and height of 100
                    Bitmap oBitmap = new Bitmap(w, 100);
                    // then create a Graphic object for the bitmap we just created.
                    Graphics oGraphics = Graphics.FromImage(oBitmap);
                    // Now create a Font object for the Barcode Font
                    // (in this case the IDAutomationHC39M) of 18 point size
                    Font oFont = new Font("IDAutomationHC39M", 18);
                    // Let's create the Point and Brushes for the barcode
                    PointF oPoint = new PointF(2f, 2f);
                    SolidBrush oBrushWrite = new SolidBrush(Color.Black);
                    SolidBrush oBrush = new SolidBrush(Color.White);
                    // Now lets create the actual barcode image
                    // with a rectangle filled with white color
                    oGraphics.FillRectangle(oBrush, 0, 0, w, 100);
                    // We have to put prefix and sufix of an asterisk (*),
                    // in order to be a valid barcode
                    oGraphics.DrawString("*" + id + "*", oFont, oBrushWrite, oPoint);
                    // Then we send the Graphics with the actual barcode
                    System.Web.UI.WebControls.Image imgBarCode = new System.Web.UI.WebControls.Image();
    
                    using (System.IO.FileStream fs = System.IO.File.Open(Server.MapPath("~/img/barcodes/") + id + ".jpg", FileMode.Create))
                    {
                        oBitmap.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
    
                    }
                    oBitmap.Dispose();
                    imgbarcode.ImageUrl = "~/img/barcodes/"+id+".jpg";
    }