This is a migrated thread and some comments may be shown as answers.

Problems scanning Radbarcodes

2 Answers 156 Views
Barcode
This is a migrated thread and some comments may be shown as answers.
John
Top achievements
Rank 1
John asked on 09 Oct 2014, 01:15 PM
Having trouble getting RadBarcodes to scan unless made larger than default with LineWidth = 2.  UPC-A and EAN are the troublemakers with LineWidth = 1.  ITF-14 scans ok at LineWidth = 1. 

As documentation suggests, we tried setting Height and Width to empty strings to let control size things as it needs based on LineWidth setting.  Also tried using code like Height = New Unit(1.02, UnitType.inch) and Width = New Unit(1.469, UnitType.inch) to set to standard UPCA 1.02in x 1.469in size, but the RadBarcode control seems to just ignore the settings.  Any clues as to why LineWidth = 1 won't scan?   I can't find any other RadBarcode control properties that would help.

When I check the industry standard on UPCA, it says that the size is allowed to be anywhere from 80% to 200% of 1.02in x 1.469in.  But I can't find any way to make the RadBarcode create it in anything but mutliple of LineWidth (i.e. LineWidth=1 is default size, LineWidth=2 is twice as large, ...etc).

Its not a problem with our scanner, which is able to scan other smaller UPCA and ITF14 barcodes (not generated from RadBarcode) without problem. We are using a pretty standard Motorola LS2208 handheld scanner for testing, which is what our vendors are using.

Declaring control as
<telerik:RadBarcode runat="server" ID="cuBarCode" Width="" Height="" ></telerik:RadBarcode>

Setting up in codebehind as follows since we have to support 4 different barcodes types based on user choice...
Public Sub SetRadbarcodeProperties(ByVal barcodeCtl As RadBarcode, ByVal bc As FPHBarCode)
 
    barcodeCtl.OutputType = BarcodeOutputType.EmbeddedPNG
    barcodeCtl.Text = bc.Value
 
    Select Case bc.Type
        Case "ITF-14"
            barcodeCtl.Type = BarcodeType.Code25Interleaved
            barcodeCtl.RenderChecksum = False
            barcodeCtl.LineWidth = 2
        Case "UPC-A"
            barcodeCtl.Type = BarcodeType.UPCA
            barcodeCtl.RenderChecksum = True
            barcodeCtl.LineWidth = 2
        Case "EAN-13"
            barcodeCtl.Type = BarcodeType.EAN13
            barcodeCtl.RenderChecksum = True
            barcodeCtl.LineWidth = 2
        Case "UPC-E"
            barcodeCtl.Type = BarcodeType.UPCE
            barcodeCtl.RenderChecksum = True
            barcodeCtl.LineWidth = 2
        Case Else
            Throw New InvalidOperationException("Cannot handle barcode type=" + bc.Type)
    End Select
 
End Sub

2 Answers, 1 is accepted

Sort by
0
Vasil
Telerik team
answered on 13 Oct 2014, 03:13 PM
Hello John,

There are two types of rendering for the RadBarcode: PNG and SVG.

The PNG is basically raster(bitmap) image. The width of the lines in the output image should be integers. For example you can not have line pixel and a half wide.
In this type of rendering, you have several options:
 
  • Set LineWidth to some positive number. In this case the image will be shown in your monitor crisp and clear. In case the LineWidth=1 you can scan Barcode if the scanning device has good enough resolution to distinguish between pixels. (If we are talking about scanning it from the display). The browser zoom, screen resolution and DPI will affect how large is your image. So in different monitors it could look different in absolute (inch, cm) size.
  • Set LineWidth=0, and specify Width and Height in pixels. Now the output bitmap will have width of the lines to 1 pixel, but it will be resized in your browser. In this case you will need to assume what could be the monitor DPI and modify multiply it by your target inch sizes. The browsers can upscale using different algorithms and in some cases the result can look blurry. *

The SVG is on other hand vector format. In this case the lines does not have exact width in pixels, but they are resolved in the browser depending on the screen resolution and DPI and the width of the whole Barcode. In this case each line get's percentage of the whole image, and it can be even resized in the browser.

Here are two examples, test them and use the more suitable for you:

RadBarcode1.OutputType = BarcodeOutputType.EmbeddedPNG;
RadBarcode1.Text = "12345";
RadBarcode1.LineWidth = 0;
RadBarcode1.Width = Unit.Pixel(105);
RadBarcode1.Height = Unit.Pixel(74);
 
RadBarcode2.OutputType = BarcodeOutputType.SVG_VML;
RadBarcode2.Text = "12345";
RadBarcode2.Width = new Unit(1.469, UnitType.Inch);
RadBarcode2.Height = new Unit(1.02, UnitType.Inch);


* You can change the upscale resizing algorithms used by the IE and Firefox using CSS to avoid anti-aliasing when using PNG or other raster graphics.
.rbcImg
{
    image-rendering: -moz-crisp-edges;
    -ms-interpolation-mode: nearest-neighbor;
}

Regards,
Vasil
Telerik
 

Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.

 
0
John
Top achievements
Rank 1
answered on 13 Oct 2014, 03:34 PM
Thanks a bunch for the info.

It would be helpful (and would have saved me a lot of time) if the RadBarcode documentation included this information about EmbeddedPng.  As far as i can tell, nowhere is it specified that you must set LineWidth=0 for the Height/Width setting to be used (which you say will then actually use a value of 1 for LineWidth even thought you specify 0). 

Also thanks for the stylesheet info on keeping edges crisp.  This would also be useful info for the documentation.

I will be trying these changes today and get back if still having trouble.
Tags
Barcode
Asked by
John
Top achievements
Rank 1
Answers by
Vasil
Telerik team
John
Top achievements
Rank 1
Share this question
or