Ax.barcode.Scanner lets you scan PDF and image files to find a barcode and retrieve its value.

1 Barcode examples

1.1 Image barcode

For the following examples we will use an image file containing a PDF417 barcode with Base64 encoding.

Copy
function getImageBarcode()
{
    var graph = new Ax.barcode.PDF417("ABCabc123");
    var barcode = graph.toPNG();
    // Uncomment these to rotate the barcode 90º:
    /*
    var image = new Ax.image.Image(barcode);
    image.rotate('CW_90');
    var barcode = image.getBytes();
    */
    return barcode;
}
var bytes = getImageBarcode();
return Ax.util.Base64.encode(bytes);
iVBORw0KGgoAAAANSUhEUgAAAFYAAAAtCAIAAAC70QuiAAAERUlEQVR4Xo2NUY7jUAzDev9LdxcQQNCyk6k+jGeaSj6fh3y/3z2TF21fC26/riesueWEkxNux6TkkbIzd20LdS24/bqesOaWE05OuB2TkkfKzty1LdS14PbresKaW044OeF2TEoeKTtz107hXCs4TPiPld1idezzhpQ8Unbmrp3CuVZwmPAfK7vF6tjnDSl5pOzMXTuFc63gMOE/VnaL1bHPG1LySNmZrm3BQT4rQE5kX5k+bb84CbdjUvJI2ZmubcFBPitATmRfmT5tvzgJt2NS8kjZma5twUE+K0BOZF+ZPm2/OAm3Y1LySNmZZ81O5TztL/tEtmzNa8iGCV/AMSl5pOzMs2ancp72l30iW7bmNWTDhC/gmJQ8UnbmWbNTOU/7yz6RLVvzGrJhwhdwTEoeKTvTNZ8gzq64BcQB8qiKiZ1aK9RxTEoeKTvTNZ8gzq64BcQB8qiKiZ1aK9RxTEoeKTvTNZ8gzq64BcQB8qiKiZ1aK9RxTEoeKTvzrNmBWP6l4pVinZ6+k8e+JnRxTEoeKTvzrNmBWP6l4pVinZ6+k8e+JnRxTEoeKTvzrNmBWP6l4pVinZ6+k8e+JnRxTEoeKTvTtfNDtRZxpbhXm1zrxNuBO+F2TEoeKTvTtfNDtRZxpbhXm1zrxNuBO+F2TEoeKTvTtfNDtRZxpbhXm1zrxNuBO+F2TEoeKTvzqVYftXNW7FdlQ04Ozrk6fATHpOSRsjOfavVRO2fFflU25OTgnKvDR3BMSh4pO/OpVh+1c1bsV2VDTg7OuTp8BMek5JGyM1++sj+Hb5l3kd0yDOd6wl1JtmNS8kjZmS9f2Z/Dt8y7yG4ZhnM94a4k2zEpeaTszJev7M/hW+ZdZLcMw7mecFeS7ZiUPFJ25vmVvN3ibYGTIeSlYvKyQirhdkxKHik78/xK3m7xtsDJEPJSMXlZIZVwOyYlj5SdeX4lb7d4W+BkCHmpmLyskEq4HZOSR8rOdO38EI6veVfsMOvEekLWvH11XOcNKXmk7EzXzg/h+Jp3xQ6zTqwnZM3bV8d13pCSR8rOdO38EI6veVfsMOvEekLWvH11XOcNKXmk7EzXNvSV7IpDMdMpM0KmBd5n5XO1TEoeKTvTtQ19JbviUMx0yoyQaYH3WflcLZOSR8rOdG1DX8muOBQznTIjZFrgfVY+V8uk5JGyM8+v/MmBnPjFuQKZhi8k70q4fZOSR8rOPL/yJwdy4hfnCmQavpC8K+H2TUoeKTvz/MqfHMiJX5wrkGn4QvKuhNs3KXmk7Mxd2yfeXutTFZxzDYH7bZh1p7QiJY+Unblr+8Tba32qgnOuIXC/DbPulFak5JGyM3dtn3h7rU9VcM41BO63Ydad0oqUPFJ25q7V6en67pifswKs73gl9nlDSh4pO3PX6vR0fXfMz1kB1ne8Evu8ISWPlJ25a3V6ur475uesAOs7Xol93pD/j399kbhTz/VjxQAAAABJRU5ErkJggg==

1.2 PDF barcode

We will also use a PDF file containing the previous image.

Copy
function getPDFBarcode()
{
    var barcode = getImageBarcode() //Previous example
    var root = new Ax.fop.DocumentBuilder().createDocument(21, 30, 0, 0, 0, 0);
    root.setDebug("");
    root.getSimplePageMaster().setMargins(0.5, 0.5, 0.5, 0.5);
    var flow = root.getBodyFlow();
    flow.addBlock().setTextAlign("center").setPaddingAfter(5).build(c => {
        c.addBlock().build(logoBlock => {
            logoBlock.addExternalGraphic(barcode).setContentWidth(4.0).setVerticalAlign("middle");
            logoBlock.addText("HELLOW").setFontWeight("bold");
        });
    });
    var fop = root.toFOP();
    console.log(fop);
    let pdf = new Ax.fop.Processor().transform(fop);
    return pdf;
}
var bytes = getPDFBarcode();
return Ax.util.Base64.encode(bytes);
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YW0KZW5kb2JqCjMgMCBvYmoKMjQ3MgplbmRvYmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+eC11bmtub3duPC9kYzpsYW5ndWFnZT4KPGRjOmRhdGU+MjAyMS0wMi0wOVQwOToxODo0NyswMTowMDwvZGM6ZGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIiByZGY6YWJvdXQ9IiI+CjxwZGY6UHJvZHVjZXI+QXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzI8L3BkZjpQcm9kdWNlcj4KPHBkZjpQREZWZXJzaW9uPjEuNDwvcGRmOlBERlZlcnNpb24+CjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgcmRmOmFib3V0PSIiPgo8eG1wOkNyZWF0b3JUb29sPkFwYWNoZSBGT1AgVmVyc2lvbiAwLjAuMjMyPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMjEtMDItMDlUMDk6MTg6NDcrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTAyLTA5VDA5OjE4OjQ3KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjwvcmRmOlJERj4KPC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0iciI/PgoKZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjg3MwplbmRvYmoKNyAwIG9iago8PAogIC9OYW1lIC9JbTEKICAvVHlwZSAvWE9iamVjdAogIC9MZW5ndGggOCAwIFIKICAvRmlsdGVyIC9GbGF0ZURlY29kZQogIC9TdWJ0eXBlIC9JbWFnZQogIC9XaWR0aCA4NgogIC9IZWlnaHQgNDUKICAvQml0c1BlckNvbXBvbmVudCA4CiAgL0NvbG9yU3BhY2UgWy9JQ0NCYXNlZCAyIDAgUl0KPj4Kc3RyZWFtCnic7ZFLDgMhDEO5/6XpolJF4w+oGtKNWYwEiWPnzRj8zDnx+z6mDavl0Q+cyzFJsBmtUf7pUWlDIASeIrAamWzbvbYSVIVACDQTUCuURaikhKFC5Y6/wEALgRC4SoB2npQMOgMNJ6DQLxICIfA4Acw2vw9KqLtS0SRFQq8hEAJtBE4SYklJ1iu6+Dl+nRAIgXsE6BwankrKO84xFmW4+jUhEAK3CSgXGvIwlYpKHbcuIRACVwngELpmkVB5ESrONPb214RACPQQwEiKgNoRS8ZFXUMgBJoJqDm4gjLCPFjaGimkIRAC/QTMTJQYlwJwu8sAkiEQAm0EVGb6rnzpLn4adiLnEAiBHgJ+Pl7LKPRa389dKI0QCIH/ElBV30PjUSESKF4hEAI/EHgBkjK4UwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMzAzCmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nHVPvQrCQAze7yky6mCaXHrXyypWVApSOHAQJ0GnIn3/xdS2KAW5IVy+fH+9YyB7m2GkQCgqcO9cP+0ZuESuZB4GtQZ+CMPFtE4S0fsZ/Us1iAXFfMiPtkFRfFJVYFVkikQCkVArHQjFsWPYvUyV4Om22RV70/OQH9/cwh5LJdVK7FNioGh6WkHu4LqCQ90058v6Bvnk6jyl57FwSGyeflFuEf+3W+veudU8bgplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjE3MwplbmRvYmoKMTEgMCBvYmoKPDwKICAvUmVzb3VyY2VzIDEyIDAgUgogIC9UeXBlIC9QYWdlCiAgL01lZGlhQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9Dcm9wQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9CbGVlZEJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvVHJpbUJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvUGFyZW50IDEzIDAgUgogIC9Db250ZW50cyA5IDAgUgo+PgplbmRvYmoKMTQgMCBvYmoKPDwKICAvVHlwZSAvRm9udAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQKICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzCi9Db3VudCAxCi9LaWRzIFsxMSAwIFIgXSA+PgplbmRvYmoKMTUgMCBvYmoKPDwKICAvVHlwZSAvQ2F0YWxvZwogIC9QYWdlcyAxMyAwIFIKICAvTGFuZyAoeC11bmtub3duKQogIC9NZXRhZGF0YSA1IDAgUgogIC9QYWdlTGFiZWxzIDE2IDAgUgo+PgplbmRvYmoKMTIgMCBvYmoKPDwKICAvRm9udCA8PCAvRjMgMTQgMCBSID4+CiAgL1Byb2NTZXQgWy9QREYgL0ltYWdlQiAvSW1hZ2VDIC9UZXh0XQogIC9YT2JqZWN0IDw8IC9JbTEgNyAwIFIgPj4KICAvQ29sb3JTcGFjZSA8PCAvRGVmYXVsdFJHQiA0IDAgUiA+Pgo+PgplbmRvYmoKMTYgMCBvYmoKPDwgL051bXMgWzAgPDwgL1MgL0QgPj5dID4+CmVuZG9iagp4cmVmCjAgMTcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAxNTMgMDAwMDAgbiAKMDAwMDAwMjcxMCAwMDAwMCBuIAowMDAwMDAyNzMwIDAwMDAwIG4gCjAwMDAwMDI3NjMgMDAwMDAgbiAKMDAwMDAwMzcyNSAwMDAwMCBuIAowMDAwMDAzNzQ0IDAwMDAwIG4gCjAwMDAwMDQyNTIgMDAwMDAgbiAKMDAwMDAwNDI3MSAwMDAwMCBuIAowMDAwMDA0NTE5IDAwMDAwIG4gCjAwMDAwMDQ1MzkgMDAwMDAgbiAKMDAwMDAwNTA0OSAwMDAwMCBuIAowMDAwMDA0ODc1IDAwMDAwIG4gCjAwMDAwMDQ3NjQgMDAwMDAgbiAKMDAwMDAwNDkzNSAwMDAwMCBuIAowMDAwMDA1MjAyIDAwMDAwIG4gCnRyYWlsZXIKPDwKICAvUm9vdCAxNSAwIFIKICAvSW5mbyAxIDAgUgogIC9JRCBbPDgxMkNFOTQxOEEwMEFFMkM3QjM2NTY1RTBCNUU4QzdDPiA8ODEyQ0U5NDE4QTAwQUUyQzdCMzY1NjVFMEI1RThDN0M+XQogIC9TaXplIDE3Cj4+CnN0YXJ0eHJlZgo1MjQ2CiUlRU9GCg==

2 Scanner

The default constructor is:

Copy
var scanner = new Ax.barcode.Scanner();

2.1 Scanning

As mentioned before, the Scanner is able to find barcodes in both image and PDF files.

Its usage is the following:

Copy
var file = 'iVBORw0KGgoAAAANSUhEUgAAAFYAAAAtCAIAAAC70QuiAAAERUlEQVR4Xo2NUY7jUAzDev9LdxcQQNCyk6k+jGeaSj6fh3y/3z2TF21fC26/riesueWEkxNux6TkkbIzd20LdS24/bqesOaWE05OuB2TkkfKzty1LdS14PbresKaW044OeF2TEoeKTtz107hXCs4TPiPld1idezzhpQ8Unbmrp3CuVZwmPAfK7vF6tjnDSl5pOzMXTuFc63gMOE/VnaL1bHPG1LySNmZrm3BQT4rQE5kX5k+bb84CbdjUvJI2ZmubcFBPitATmRfmT5tvzgJt2NS8kjZma5twUE+K0BOZF+ZPm2/OAm3Y1LySNmZZ81O5TztL/tEtmzNa8iGCV/AMSl5pOzMs2ancp72l30iW7bmNWTDhC/gmJQ8UnbmWbNTOU/7yz6RLVvzGrJhwhdwTEoeKTvTNZ8gzq64BcQB8qiKiZ1aK9RxTEoeKTvTNZ8gzq64BcQB8qiKiZ1aK9RxTEoeKTvTNZ8gzq64BcQB8qiKiZ1aK9RxTEoeKTvzrNmBWP6l4pVinZ6+k8e+JnRxTEoeKTvzrNmBWP6l4pVinZ6+k8e+JnRxTEoeKTvzrNmBWP6l4pVinZ6+k8e+JnRxTEoeKTvTtfNDtRZxpbhXm1zrxNuBO+F2TEoeKTvTtfNDtRZxpbhXm1zrxNuBO+F2TEoeKTvTtfNDtRZxpbhXm1zrxNuBO+F2TEoeKTvzqVYftXNW7FdlQ04Ozrk6fATHpOSRsjOfavVRO2fFflU25OTgnKvDR3BMSh4pO/OpVh+1c1bsV2VDTg7OuTp8BMek5JGyM1++sj+Hb5l3kd0yDOd6wl1JtmNS8kjZmS9f2Z/Dt8y7yG4ZhnM94a4k2zEpeaTszJev7M/hW+ZdZLcMw7mecFeS7ZiUPFJ25vmVvN3ibYGTIeSlYvKyQirhdkxKHik78/xK3m7xtsDJEPJSMXlZIZVwOyYlj5SdeX4lb7d4W+BkCHmpmLyskEq4HZOSR8rOdO38EI6veVfsMOvEekLWvH11XOcNKXmk7EzXzg/h+Jp3xQ6zTqwnZM3bV8d13pCSR8rOdO38EI6veVfsMOvEekLWvH11XOcNKXmk7EzXNvSV7IpDMdMpM0KmBd5n5XO1TEoeKTvTtQ19JbviUMx0yoyQaYH3WflcLZOSR8rOdG1DX8muOBQznTIjZFrgfVY+V8uk5JGyM8+v/MmBnPjFuQKZhi8k70q4fZOSR8rOPL/yJwdy4hfnCmQavpC8K+H2TUoeKTvz/MqfHMiJX5wrkGn4QvKuhNs3KXmk7Mxd2yfeXutTFZxzDYH7bZh1p7QiJY+Unblr+8Tba32qgnOuIXC/DbPulFak5JGyM3dtn3h7rU9VcM41BO63Ydad0oqUPFJ25q7V6en67pifswKs73gl9nlDSh4pO3PX6vR0fXfMz1kB1ne8Evu8ISWPlJ25a3V6ur475uesAOs7Xol93pD/j399kbhTz/VjxQAAAABJRU5ErkJggg==';
var bytes = Ax.util.Base64.decode(file);
var scanner = new Ax.barcode.Scanner();
var result = scanner.scanImage(bytes);
console.log(result);
ABCabc123

In case of a PDF file, the Scanner searches all the document's images, until the one with the barcode is successfully scanned and its value is returned.

If the PDF contains SVG elements those will not be scanned, as they are not detected as images.

Copy
var file = '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YW0KZW5kb2JqCjMgMCBvYmoKMjQ3MgplbmRvYmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+eC11bmtub3duPC9kYzpsYW5ndWFnZT4KPGRjOmRhdGU+MjAyMS0wMi0wOVQwOToxODo0NyswMTowMDwvZGM6ZGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIiByZGY6YWJvdXQ9IiI+CjxwZGY6UHJvZHVjZXI+QXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzI8L3BkZjpQcm9kdWNlcj4KPHBkZjpQREZWZXJzaW9uPjEuNDwvcGRmOlBERlZlcnNpb24+CjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgcmRmOmFib3V0PSIiPgo8eG1wOkNyZWF0b3JUb29sPkFwYWNoZSBGT1AgVmVyc2lvbiAwLjAuMjMyPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMjEtMDItMDlUMDk6MTg6NDcrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTAyLTA5VDA5OjE4OjQ3KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjwvcmRmOlJERj4KPC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0iciI/PgoKZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjg3MwplbmRvYmoKNyAwIG9iago8PAogIC9OYW1lIC9JbTEKICAvVHlwZSAvWE9iamVjdAogIC9MZW5ndGggOCAwIFIKICAvRmlsdGVyIC9GbGF0ZURlY29kZQogIC9TdWJ0eXBlIC9JbWFnZQogIC9XaWR0aCA4NgogIC9IZWlnaHQgNDUKICAvQml0c1BlckNvbXBvbmVudCA4CiAgL0NvbG9yU3BhY2UgWy9JQ0NCYXNlZCAyIDAgUl0KPj4Kc3RyZWFtCnic7ZFLDgMhDEO5/6XpolJF4w+oGtKNWYwEiWPnzRj8zDnx+z6mDavl0Q+cyzFJsBmtUf7pUWlDIASeIrAamWzbvbYSVIVACDQTUCuURaikhKFC5Y6/wEALgRC4SoB2npQMOgMNJ6DQLxICIfA4Acw2vw9KqLtS0SRFQq8hEAJtBE4SYklJ1iu6+Dl+nRAIgXsE6BwankrKO84xFmW4+jUhEAK3CSgXGvIwlYpKHbcuIRACVwngELpmkVB5ESrONPb214RACPQQwEiKgNoRS8ZFXUMgBJoJqDm4gjLCPFjaGimkIRAC/QTMTJQYlwJwu8sAkiEQAm0EVGb6rnzpLn4adiLnEAiBHgJ+Pl7LKPRa389dKI0QCIH/ElBV30PjUSESKF4hEAI/EHgBkjK4UwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMzAzCmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nHVPvQrCQAze7yky6mCaXHrXyypWVApSOHAQJ0GnIn3/xdS2KAW5IVy+fH+9YyB7m2GkQCgqcO9cP+0ZuESuZB4GtQZ+CMPFtE4S0fsZ/Us1iAXFfMiPtkFRfFJVYFVkikQCkVArHQjFsWPYvUyV4Om22RV70/OQH9/cwh5LJdVK7FNioGh6WkHu4LqCQ90058v6Bvnk6jyl57FwSGyeflFuEf+3W+veudU8bgplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjE3MwplbmRvYmoKMTEgMCBvYmoKPDwKICAvUmVzb3VyY2VzIDEyIDAgUgogIC9UeXBlIC9QYWdlCiAgL01lZGlhQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9Dcm9wQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9CbGVlZEJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvVHJpbUJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvUGFyZW50IDEzIDAgUgogIC9Db250ZW50cyA5IDAgUgo+PgplbmRvYmoKMTQgMCBvYmoKPDwKICAvVHlwZSAvRm9udAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQKICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzCi9Db3VudCAxCi9LaWRzIFsxMSAwIFIgXSA+PgplbmRvYmoKMTUgMCBvYmoKPDwKICAvVHlwZSAvQ2F0YWxvZwogIC9QYWdlcyAxMyAwIFIKICAvTGFuZyAoeC11bmtub3duKQogIC9NZXRhZGF0YSA1IDAgUgogIC9QYWdlTGFiZWxzIDE2IDAgUgo+PgplbmRvYmoKMTIgMCBvYmoKPDwKICAvRm9udCA8PCAvRjMgMTQgMCBSID4+CiAgL1Byb2NTZXQgWy9QREYgL0ltYWdlQiAvSW1hZ2VDIC9UZXh0XQogIC9YT2JqZWN0IDw8IC9JbTEgNyAwIFIgPj4KICAvQ29sb3JTcGFjZSA8PCAvRGVmYXVsdFJHQiA0IDAgUiA+Pgo+PgplbmRvYmoKMTYgMCBvYmoKPDwgL051bXMgWzAgPDwgL1MgL0QgPj5dID4+CmVuZG9iagp4cmVmCjAgMTcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAxNTMgMDAwMDAgbiAKMDAwMDAwMjcxMCAwMDAwMCBuIAowMDAwMDAyNzMwIDAwMDAwIG4gCjAwMDAwMDI3NjMgMDAwMDAgbiAKMDAwMDAwMzcyNSAwMDAwMCBuIAowMDAwMDAzNzQ0IDAwMDAwIG4gCjAwMDAwMDQyNTIgMDAwMDAgbiAKMDAwMDAwNDI3MSAwMDAwMCBuIAowMDAwMDA0NTE5IDAwMDAwIG4gCjAwMDAwMDQ1MzkgMDAwMDAgbiAKMDAwMDAwNTA0OSAwMDAwMCBuIAowMDAwMDA0ODc1IDAwMDAwIG4gCjAwMDAwMDQ3NjQgMDAwMDAgbiAKMDAwMDAwNDkzNSAwMDAwMCBuIAowMDAwMDA1MjAyIDAwMDAwIG4gCnRyYWlsZXIKPDwKICAvUm9vdCAxNSAwIFIKICAvSW5mbyAxIDAgUgogIC9JRCBbPDgxMkNFOTQxOEEwMEFFMkM3QjM2NTY1RTBCNUU4QzdDPiA8ODEyQ0U5NDE4QTAwQUUyQzdCMzY1NjVFMEI1RThDN0M+XQogIC9TaXplIDE3Cj4+CnN0YXJ0eHJlZgo1MjQ2CiUlRU9GCg==';
var bytes = Ax.util.Base64.decode(file);
var scanner = new Ax.barcode.Scanner();
var result = scanner.scanPDF(bytes);
console.log(result);
ABCabc123

These functions return a string with the value of the found barcode, or null if no barcode has been found.

2.2 Filters

Filters can be used to refine the Scanner's search. They are used to modify the image so it is easier for the scanner to search for the barcode.

Filters are cumulative, that is, if more than one filter is specified, the output image of one filter is the input for the next.

Let's see its usage with the following example:

Copy
var file = 'JVBERi0xLjQKJaqrrK0KMSAwIG9iago8PAovQ3JlYXRvciAoQXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzIpCi9Qcm9kdWNlciAoQXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzIpCi9DcmVhdGlvbkRhdGUgKEQ6MjAyMTAyMDkwOTE4NDcrMDEnMDAnKQo+PgplbmRvYmoKMiAwIG9iago8PAogIC9OIDMKICAvTGVuZ3RoIDMgMCBSCiAgL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnic7ZlnUFRZFoDve50TDd1Nk6HJSaKEBiTnJEGyqEB3k2mhyUFRZHAERhARSYogooADjg5BRlERxYAoKKCiTiODgDIOjiIqKkvjj9mt+bG1VVv7Z/v8eO+rc0+9c+6rW/W+qgeADDGelZAM6wOQwE3h+TrbMYKCQxiYBwALSIAIKAAdzkpOtPX29gCrIagFf4v3YwAS3O/rCNZzz5Giiz7oGB6bcXn8dqJ5y9/r/yWI7AQuGwCItsqxbE4ya5V3rXI0O4EtyM8KOD0lMQUA2HuVabzVAVeZLeCIb5wh4KhvXLxW4+drv8rHAMASo9YYf1rAEWtM6RYwK5qXAIB0/2q9CiuRt/p8aUEvxW8zrIWoYD+MKA6XwwtP4bAZ/2Yr/3n8Uy9U8urL/683+B/3EZydb/TWcu1MQPTKv3LbywFgvgYAUfpXTuUIAOQ9AHT2/pWLOAFAVykAks9Yqby0bznk2uwAD8iABqSAPFAGGkAHGAJTYAFsgCNwA17ADwSDrYAFokEC4IF0kAN2gwJQBErBIVAN6kAjaAZt4CzoAhfAFXAd3Ab3wCiYAHwwDV6BBfAeLEMQhIFIEBWSghQgVUgbMoSYkBXkCHlAvlAwFAZFQVwoFcqB9kBFUBlUDdVDzdBP0HnoCnQTGoYeQZPQHPQn9AlGwESYBsvBarAezIRtYXfYD94CR8FJcBacD++HK+EG+DTcCV+Bb8OjMB9+BS8iAIKAoCMUEToIJsIe4YUIQUQieIidiEJEBaIB0YboQQwg7iP4iHnERyQaSUUykDpIC6QL0h/JQiYhdyKLkdXIU8hOZD/yPnISuYD8iiKhZFHaKHOUKyoIFYVKRxWgKlBNqA7UNdQoahr1Ho1G09HqaFO0CzoYHYvORhejj6Db0ZfRw+gp9CIGg5HCaGMsMV6YcEwKpgBThTmNuYQZwUxjPmAJWAWsIdYJG4LlYvOwFdgWbC92BDuDXcaJ4lRx5jgvHBuXiSvBNeJ6cHdx07hlvBheHW+J98PH4nfjK/Ft+Gv4J/i3BAJBiWBG8CHEEHYRKglnCDcIk4SPRApRi2hPDCWmEvcTTxIvEx8R35JIJDWSDSmElELaT2omXSU9I30QoYroiriKsEVyRWpEOkVGRF6TcWRVsi15KzmLXEE+R75LnhfFiaqJ2ouGi+4UrRE9LzouuihGFTMQ8xJLECsWaxG7KTZLwVDUKI4UNiWfcpxylTJFRVCVqfZUFnUPtZF6jTpNQ9PUaa60WFoR7UfaEG1BnCJuJB4gniFeI35RnE9H0NXorvR4egn9LH2M/klCTsJWgiOxT6JNYkRiSVJG0kaSI1ko2S45KvlJiiHlKBUndUCqS+qpNFJaS9pHOl36qPQ16XkZmoyFDEumUOaszGNZWFZL1lc2W/a47KDsopy8nLNcolyV3FW5eXm6vI18rHy5fK/8nAJVwUohRqFc4ZLCS4Y4w5YRz6hk9DMWFGUVXRRTFesVhxSXldSV/JXylNqVnirjlZnKkcrlyn3KCyoKKp4qOSqtKo9VcapM1WjVw6oDqktq6mqBanvVutRm1SXVXdWz1FvVn2iQNKw1kjQaNB5oojWZmnGaRzTvacFaxlrRWjVad7VhbRPtGO0j2sPrUOvM1nHXNawb1yHq2Oqk6bTqTOrSdT1083S7dF/rqeiF6B3QG9D7qm+sH6/fqD9hQDFwM8gz6DH401DLkGVYY/hgPWm90/rc9d3r3xhpG3GMjho9NKYaexrvNe4z/mJiasIzaTOZM1UxDTOtNR1n0pjezGLmDTOUmZ1ZrtkFs4/mJuYp5mfN/7DQsYizaLGY3aC+gbOhccOUpZJluGW9Jd+KYRVmdcyKb61oHW7dYP3cRtmGbdNkM2OraRtre9r2tZ2+Hc+uw27J3tx+h/1lB4SDs0Ohw5AjxdHfsdrxmZOSU5RTq9OCs7FztvNlF5SLu8sBl3FXOVeWa7Prgpup2w63fnei+yb3avfnHloePI8eT9jTzfOg55ONqhu5G7u8gJer10Gvp97q3knev/igfbx9anxe+Br45vgObKJu2rapZdN7Pzu/Er8Jfw3/VP++AHJAaEBzwFKgQ2BZID9IL2hH0O1g6eCY4O4QTEhASFPI4mbHzYc2T4cahxaEjm1R35Kx5eZW6a3xWy9uI28L33YuDBUWGNYS9jncK7whfDHCNaI2YoFlzzrMesW2YZez5ziWnDLOTKRlZFnkbJRl1MGouWjr6Iro+Rj7mOqYN7EusXWxS3FecSfjVuID49sTsAlhCee5FG4ct3+7/PaM7cOJ2okFifwk86RDSQs8d15TMpS8Jbk7hbb6kR5M1Uj9LnUyzSqtJu1DekD6uQyxDG7GYKZW5r7MmSynrBPZyGxWdl+OYs7unMkdtjvqd0I7I3b25Srn5udO73LedWo3fnfc7jt5+nllee/2BO7pyZfL35U/9Z3zd60FIgW8gvG9Fnvrvkd+H/P90L71+6r2fS1kF94q0i+qKPpczCq+9YPBD5U/rOyP3D9UYlJytBRdyi0dO2B94FSZWFlW2dRBz4Od5YzywvJ3h7YdullhVFF3GH849TC/0qOyu0qlqrTqc3V09WiNXU17rWztvtqlI+wjI0dtjrbVydUV1X06FnPsYb1zfWeDWkPFcfTxtOMvGgMaB04wTzQ3STcVNX05yT3JP+V7qr/ZtLm5RbalpBVuTW2dOx16+t6PDj92t+m01bfT24vOgDOpZ17+FPbT2Fn3s33nmOfaflb9ubaD2lHYCXVmdi50RXfxu4O7h8+7ne/rsejp+EX3l5MXFC/UXBS/WNKL783vXbmUdWnxcuLl+StRV6b6tvVNXA26+qDfp3/omvu1G9edrl8dsB24dMPyxoWb5jfP32Le6rptcrtz0Hiw447xnY4hk6HOu6Z3u++Z3esZ3jDcO2I9cuW+w/3rD1wf3B7dODo85j/2cDx0nP+Q/XD2UfyjN4/THi9P7HqCelL4VPRpxTPZZw2/av7azjfhX5x0mBx8vun5xBRr6tVvyb99ns5/QXpRMaMw0zxrOHthzmnu3svNL6dfJb5ani/4Xez32tcar3/+w+aPwYWghek3vDcrfxa/lXp78p3Ru75F78Vn7xPeLy8VfpD6cOoj8+PAp8BPM8vpnzGfK79ofun56v71yUrCyorQBYQuIHQBoQsIXUDoAkIXELqA0AWELiB0AaELCF1A6AJCF/g/doG1/zirgRBcjo8D4JcNgMcdAKqqAVCLBIAcmsLJSBGscrczWNsTM3kxUdEp6xipyRxGJI/Dic8UrP0D13sTDgplbmRzdHJlYW0KZW5kb2JqCjMgMCBvYmoKMjQ3MgplbmRvYmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+eC11bmtub3duPC9kYzpsYW5ndWFnZT4KPGRjOmRhdGU+MjAyMS0wMi0wOVQwOToxODo0NyswMTowMDwvZGM6ZGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIiByZGY6YWJvdXQ9IiI+CjxwZGY6UHJvZHVjZXI+QXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzI8L3BkZjpQcm9kdWNlcj4KPHBkZjpQREZWZXJzaW9uPjEuNDwvcGRmOlBERlZlcnNpb24+CjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgcmRmOmFib3V0PSIiPgo8eG1wOkNyZWF0b3JUb29sPkFwYWNoZSBGT1AgVmVyc2lvbiAwLjAuMjMyPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMjEtMDItMDlUMDk6MTg6NDcrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTAyLTA5VDA5OjE4OjQ3KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjwvcmRmOlJERj4KPC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0iciI/PgoKZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjg3MwplbmRvYmoKNyAwIG9iago8PAogIC9OYW1lIC9JbTEKICAvVHlwZSAvWE9iamVjdAogIC9MZW5ndGggOCAwIFIKICAvRmlsdGVyIC9GbGF0ZURlY29kZQogIC9TdWJ0eXBlIC9JbWFnZQogIC9XaWR0aCA4NgogIC9IZWlnaHQgNDUKICAvQml0c1BlckNvbXBvbmVudCA4CiAgL0NvbG9yU3BhY2UgWy9JQ0NCYXNlZCAyIDAgUl0KPj4Kc3RyZWFtCnic7ZFLDgMhDEO5/6XpolJF4w+oGtKNWYwEiWPnzRj8zDnx+z6mDavl0Q+cyzFJsBmtUf7pUWlDIASeIrAamWzbvbYSVIVACDQTUCuURaikhKFC5Y6/wEALgRC4SoB2npQMOgMNJ6DQLxICIfA4Acw2vw9KqLtS0SRFQq8hEAJtBE4SYklJ1iu6+Dl+nRAIgXsE6BwankrKO84xFmW4+jUhEAK3CSgXGvIwlYpKHbcuIRACVwngELpmkVB5ESrONPb214RACPQQwEiKgNoRS8ZFXUMgBJoJqDm4gjLCPFjaGimkIRAC/QTMTJQYlwJwu8sAkiEQAm0EVGb6rnzpLn4adiLnEAiBHgJ+Pl7LKPRa389dKI0QCIH/ElBV30PjUSESKF4hEAI/EHgBkjK4UwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMzAzCmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nHVPvQrCQAze7yky6mCaXHrXyypWVApSOHAQJ0GnIn3/xdS2KAW5IVy+fH+9YyB7m2GkQCgqcO9cP+0ZuESuZB4GtQZ+CMPFtE4S0fsZ/Us1iAXFfMiPtkFRfFJVYFVkikQCkVArHQjFsWPYvUyV4Om22RV70/OQH9/cwh5LJdVK7FNioGh6WkHu4LqCQ90058v6Bvnk6jyl57FwSGyeflFuEf+3W+veudU8bgplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjE3MwplbmRvYmoKMTEgMCBvYmoKPDwKICAvUmVzb3VyY2VzIDEyIDAgUgogIC9UeXBlIC9QYWdlCiAgL01lZGlhQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9Dcm9wQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9CbGVlZEJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvVHJpbUJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvUGFyZW50IDEzIDAgUgogIC9Db250ZW50cyA5IDAgUgo+PgplbmRvYmoKMTQgMCBvYmoKPDwKICAvVHlwZSAvRm9udAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQKICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzCi9Db3VudCAxCi9LaWRzIFsxMSAwIFIgXSA+PgplbmRvYmoKMTUgMCBvYmoKPDwKICAvVHlwZSAvQ2F0YWxvZwogIC9QYWdlcyAxMyAwIFIKICAvTGFuZyAoeC11bmtub3duKQogIC9NZXRhZGF0YSA1IDAgUgogIC9QYWdlTGFiZWxzIDE2IDAgUgo+PgplbmRvYmoKMTIgMCBvYmoKPDwKICAvRm9udCA8PCAvRjMgMTQgMCBSID4+CiAgL1Byb2NTZXQgWy9QREYgL0ltYWdlQiAvSW1hZ2VDIC9UZXh0XQogIC9YT2JqZWN0IDw8IC9JbTEgNyAwIFIgPj4KICAvQ29sb3JTcGFjZSA8PCAvRGVmYXVsdFJHQiA0IDAgUiA+Pgo+PgplbmRvYmoKMTYgMCBvYmoKPDwgL051bXMgWzAgPDwgL1MgL0QgPj5dID4+CmVuZG9iagp4cmVmCjAgMTcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAxNTMgMDAwMDAgbiAKMDAwMDAwMjcxMCAwMDAwMCBuIAowMDAwMDAyNzMwIDAwMDAwIG4gCjAwMDAwMDI3NjMgMDAwMDAgbiAKMDAwMDAwMzcyNSAwMDAwMCBuIAowMDAwMDAzNzQ0IDAwMDAwIG4gCjAwMDAwMDQyNTIgMDAwMDAgbiAKMDAwMDAwNDI3MSAwMDAwMCBuIAowMDAwMDA0NTE5IDAwMDAwIG4gCjAwMDAwMDQ1MzkgMDAwMDAgbiAKMDAwMDAwNTA0OSAwMDAwMCBuIAowMDAwMDA0ODc1IDAwMDAwIG4gCjAwMDAwMDQ3NjQgMDAwMDAgbiAKMDAwMDAwNDkzNSAwMDAwMCBuIAowMDAwMDA1MjAyIDAwMDAwIG4gCnRyYWlsZXIKPDwKICAvUm9vdCAxNSAwIFIKICAvSW5mbyAxIDAgUgogIC9JRCBbPDgxMkNFOTQxOEEwMEFFMkM3QjM2NTY1RTBCNUU4QzdDPiA8ODEyQ0U5NDE4QTAwQUUyQzdCMzY1NjVFMEI1RThDN0M+XQogIC9TaXplIDE3Cj4+CnN0YXJ0eHJlZgo1MjQ2CiUlRU9GCg==';
var bytes = Ax.util.Base64.decode(file);
var scanner = new Ax.barcode.Scanner();
scanner.setImageFilter(new Ax.barcode.filter.CropNorthFilter(), new Ax.barcode.filter.RotateFilter(90),new Ax.barcode.filter.ResetFilter(), new Ax.barcode.filter.RegionFilter(400, 200, 10));
var result = scanner.scanPDF(bytes);
console.log(result);
ABCabc123

Here, the Scanner does the following steps:

  1. The Scanner searches the whole image.
  2. If the barcode is not found, applies the first filter and scans the result. In this case the filter crops the image and keeps the north half of it.
  3. If the barcode is still not found, the Scanner applies the second filter to the result of the first. In this case it gets the north half of the image returned by the first filter and rotates it 90º. Then the Scanner searches the result of the second filter.
  4. If the barcode still not found, the Scanner applies the third filter. In this case the reset filter returns the original image.
  5. If the barcode is still not found, the Scanner applies the fourth filter to the result of the third. In this case the Scanner will re-scan the original image returned by the third filter by scanning all regions with the defined width and height (400x200), moving the region 10 pixels each time.

2.2.1 Crop filters

Crop filters let you choose specific regions for scanning. In case the whole image scanning is unsuccessful, it will re-scan the regions defined by the crop filters.

CropNorthFilter() Crops the north half of the image.
CropNorthEastFilter() Crops the north-east quarter of the image.
CropNorthWestFilter() Crops the north-west quarter of the image.
CropSouthFilter() Crops the south half of the image.
CropSouthEastFilter() Crops the south-east quarter of the image.
CropSouthWestFilter() Crops the south-west quarter of the image.

Look at the folowing example:

Copy
var file = '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YW0KZW5kb2JqCjMgMCBvYmoKMjQ3MgplbmRvYmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+eC11bmtub3duPC9kYzpsYW5ndWFnZT4KPGRjOmRhdGU+MjAyMS0wMi0wOVQwOToxODo0NyswMTowMDwvZGM6ZGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIiByZGY6YWJvdXQ9IiI+CjxwZGY6UHJvZHVjZXI+QXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzI8L3BkZjpQcm9kdWNlcj4KPHBkZjpQREZWZXJzaW9uPjEuNDwvcGRmOlBERlZlcnNpb24+CjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgcmRmOmFib3V0PSIiPgo8eG1wOkNyZWF0b3JUb29sPkFwYWNoZSBGT1AgVmVyc2lvbiAwLjAuMjMyPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMjEtMDItMDlUMDk6MTg6NDcrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTAyLTA5VDA5OjE4OjQ3KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjwvcmRmOlJERj4KPC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0iciI/PgoKZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjg3MwplbmRvYmoKNyAwIG9iago8PAogIC9OYW1lIC9JbTEKICAvVHlwZSAvWE9iamVjdAogIC9MZW5ndGggOCAwIFIKICAvRmlsdGVyIC9GbGF0ZURlY29kZQogIC9TdWJ0eXBlIC9JbWFnZQogIC9XaWR0aCA4NgogIC9IZWlnaHQgNDUKICAvQml0c1BlckNvbXBvbmVudCA4CiAgL0NvbG9yU3BhY2UgWy9JQ0NCYXNlZCAyIDAgUl0KPj4Kc3RyZWFtCnic7ZFLDgMhDEO5/6XpolJF4w+oGtKNWYwEiWPnzRj8zDnx+z6mDavl0Q+cyzFJsBmtUf7pUWlDIASeIrAamWzbvbYSVIVACDQTUCuURaikhKFC5Y6/wEALgRC4SoB2npQMOgMNJ6DQLxICIfA4Acw2vw9KqLtS0SRFQq8hEAJtBE4SYklJ1iu6+Dl+nRAIgXsE6BwankrKO84xFmW4+jUhEAK3CSgXGvIwlYpKHbcuIRACVwngELpmkVB5ESrONPb214RACPQQwEiKgNoRS8ZFXUMgBJoJqDm4gjLCPFjaGimkIRAC/QTMTJQYlwJwu8sAkiEQAm0EVGb6rnzpLn4adiLnEAiBHgJ+Pl7LKPRa389dKI0QCIH/ElBV30PjUSESKF4hEAI/EHgBkjK4UwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMzAzCmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nHVPvQrCQAze7yky6mCaXHrXyypWVApSOHAQJ0GnIn3/xdS2KAW5IVy+fH+9YyB7m2GkQCgqcO9cP+0ZuESuZB4GtQZ+CMPFtE4S0fsZ/Us1iAXFfMiPtkFRfFJVYFVkikQCkVArHQjFsWPYvUyV4Om22RV70/OQH9/cwh5LJdVK7FNioGh6WkHu4LqCQ90058v6Bvnk6jyl57FwSGyeflFuEf+3W+veudU8bgplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjE3MwplbmRvYmoKMTEgMCBvYmoKPDwKICAvUmVzb3VyY2VzIDEyIDAgUgogIC9UeXBlIC9QYWdlCiAgL01lZGlhQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9Dcm9wQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9CbGVlZEJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvVHJpbUJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvUGFyZW50IDEzIDAgUgogIC9Db250ZW50cyA5IDAgUgo+PgplbmRvYmoKMTQgMCBvYmoKPDwKICAvVHlwZSAvRm9udAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQKICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzCi9Db3VudCAxCi9LaWRzIFsxMSAwIFIgXSA+PgplbmRvYmoKMTUgMCBvYmoKPDwKICAvVHlwZSAvQ2F0YWxvZwogIC9QYWdlcyAxMyAwIFIKICAvTGFuZyAoeC11bmtub3duKQogIC9NZXRhZGF0YSA1IDAgUgogIC9QYWdlTGFiZWxzIDE2IDAgUgo+PgplbmRvYmoKMTIgMCBvYmoKPDwKICAvRm9udCA8PCAvRjMgMTQgMCBSID4+CiAgL1Byb2NTZXQgWy9QREYgL0ltYWdlQiAvSW1hZ2VDIC9UZXh0XQogIC9YT2JqZWN0IDw8IC9JbTEgNyAwIFIgPj4KICAvQ29sb3JTcGFjZSA8PCAvRGVmYXVsdFJHQiA0IDAgUiA+Pgo+PgplbmRvYmoKMTYgMCBvYmoKPDwgL051bXMgWzAgPDwgL1MgL0QgPj5dID4+CmVuZG9iagp4cmVmCjAgMTcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAxNTMgMDAwMDAgbiAKMDAwMDAwMjcxMCAwMDAwMCBuIAowMDAwMDAyNzMwIDAwMDAwIG4gCjAwMDAwMDI3NjMgMDAwMDAgbiAKMDAwMDAwMzcyNSAwMDAwMCBuIAowMDAwMDAzNzQ0IDAwMDAwIG4gCjAwMDAwMDQyNTIgMDAwMDAgbiAKMDAwMDAwNDI3MSAwMDAwMCBuIAowMDAwMDA0NTE5IDAwMDAwIG4gCjAwMDAwMDQ1MzkgMDAwMDAgbiAKMDAwMDAwNTA0OSAwMDAwMCBuIAowMDAwMDA0ODc1IDAwMDAwIG4gCjAwMDAwMDQ3NjQgMDAwMDAgbiAKMDAwMDAwNDkzNSAwMDAwMCBuIAowMDAwMDA1MjAyIDAwMDAwIG4gCnRyYWlsZXIKPDwKICAvUm9vdCAxNSAwIFIKICAvSW5mbyAxIDAgUgogIC9JRCBbPDgxMkNFOTQxOEEwMEFFMkM3QjM2NTY1RTBCNUU4QzdDPiA8ODEyQ0U5NDE4QTAwQUUyQzdCMzY1NjVFMEI1RThDN0M+XQogIC9TaXplIDE3Cj4+CnN0YXJ0eHJlZgo1MjQ2CiUlRU9GCg==';
var bytes = Ax.util.Base64.decode(file);
var scanner = new Ax.barcode.Scanner();
scanner.setImageFilter(new Ax.barcode.filter.CropNorthFilter());
var result = scanner.scanPDF(bytes);
console.log(result);
ABCabc123

Here the scanner will scan the whole text. If the barcode is not found, it will re-scan the north half of the image.

2.2.2 Rotation filter

The rotation filter can be used to rotate a image for scanning it more efficiently. Useful if a barcode is in vertical or inverted position.

RotateFilter(double angle) Rotates the image the specified amount of degrees. 'angle' can be negative.

Look at the following example:

Copy
var file = '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YW0KZW5kb2JqCjMgMCBvYmoKMjQ3MgplbmRvYmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+eC11bmtub3duPC9kYzpsYW5ndWFnZT4KPGRjOmRhdGU+MjAyMS0wMi0wOVQwOToyNjo1MiswMTowMDwvZGM6ZGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIiByZGY6YWJvdXQ9IiI+CjxwZGY6UHJvZHVjZXI+QXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzI8L3BkZjpQcm9kdWNlcj4KPHBkZjpQREZWZXJzaW9uPjEuNDwvcGRmOlBERlZlcnNpb24+CjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgcmRmOmFib3V0PSIiPgo8eG1wOkNyZWF0b3JUb29sPkFwYWNoZSBGT1AgVmVyc2lvbiAwLjAuMjMyPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMjEtMDItMDlUMDk6MjY6NTIrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTAyLTA5VDA5OjI2OjUyKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjwvcmRmOlJERj4KPC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0iciI/PgoKZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjg3MwplbmRvYmoKNyAwIG9iago8PAogIC9OYW1lIC9JbTEKICAvVHlwZSAvWE9iamVjdAogIC9MZW5ndGggOCAwIFIKICAvRmlsdGVyIC9GbGF0ZURlY29kZQogIC9TdWJ0eXBlIC9JbWFnZQogIC9XaWR0aCA0NQogIC9IZWlnaHQgODYKICAvQml0c1BlckNvbXBvbmVudCA4CiAgL0NvbG9yU3BhY2UgWy9JQ0NCYXNlZCAyIDAgUl0KPj4Kc3RyZWFtCnic7ZRJDoUwDEO5/6X/32QHWLYbaoTylh3ioYjjGIZh0Pi9g3QNRbqGIl1Dka6hSNdQpGsYLkh/FLcAh5EUkuj5DLMiDfSMSYif0q0NaYWJI6kzRYFbi6KShKTVpd7Vhnfd22LUvcOejcVc4Iw3sMshmPOcjfY5UooNScGKZ5Vh8TozsF3iOe4+lc1IDp9LwYgyW4wxKeDiQO+MlGtxq+spQXVMq1JkLw6QYBxKA7skwGQvu5RLMi+tMFY9h5Kf9sNeLikFwDPG+JGuMwOBZ2+OpMVsMcbALUli55wszCtv4OwHOASHmVzZ7J5DKTKzJU1m6mW2GPWuNjZM9kSZ7GBgu5Z0i4kseWaMSZEXtbpEGRhj0tZOLakosCXFAdeZOdJKl3kpIIjcvuL5+QbgKYdheBvpH0aRrqFI1zBckP4oinQNRbqGIl3Du0i/RvEHlG+4UwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMzM5CmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nHWPvQrCQBCE+3uKLbVwsz+X5K4VIyoBCRxYiJWgVZC8f+OeSVACcsXCzs18O4NjIHubPEJJqFHh3rth2jOwR651HiZ1Jn4M+ce0DlqhyKz+tZrEimockhErXGEVKUYPHCMyVUQKwgHVUwwhu4pjz7B7WTTB022TK/YWKpAe3+OVBX3OqdW4BuEQLKn0kHq4ruDQtO35sr5BOrkmTR14rF0GNrAsKi5K/Dbs3BsSPD13CmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKMTc4CmVuZG9iagoxMSAwIG9iago8PAogIC9SZXNvdXJjZXMgMTIgMCBSCiAgL1R5cGUgL1BhZ2UKICAvTWVkaWFCb3ggWzAgMCA1OTUuMjc1IDg1MC4zOTNdCiAgL0Nyb3BCb3ggWzAgMCA1OTUuMjc1IDg1MC4zOTNdCiAgL0JsZWVkQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9UcmltQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9QYXJlbnQgMTMgMCBSCiAgL0NvbnRlbnRzIDkgMCBSCj4+CmVuZG9iagoxNCAwIG9iago8PAogIC9UeXBlIC9Gb250CiAgL1N1YnR5cGUgL1R5cGUxCiAgL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAogIC9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvUGFnZXMKL0NvdW50IDEKL0tpZHMgWzExIDAgUiBdID4+CmVuZG9iagoxNSAwIG9iago8PAogIC9UeXBlIC9DYXRhbG9nCiAgL1BhZ2VzIDEzIDAgUgogIC9MYW5nICh4LXVua25vd24pCiAgL01ldGFkYXRhIDUgMCBSCiAgL1BhZ2VMYWJlbHMgMTYgMCBSCj4+CmVuZG9iagoxMiAwIG9iago8PAogIC9Gb250IDw8IC9GMyAxNCAwIFIgPj4KICAvUHJvY1NldCBbL1BERiAvSW1hZ2VCIC9JbWFnZUMgL1RleHRdCiAgL1hPYmplY3QgPDwgL0ltMSA3IDAgUiA+PgogIC9Db2xvclNwYWNlIDw8IC9EZWZhdWx0UkdCIDQgMCBSID4+Cj4+CmVuZG9iagoxNiAwIG9iago8PCAvTnVtcyBbMCA8PCAvUyAvRCA+Pl0gPj4KZW5kb2JqCnhyZWYKMCAxNwowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDE1MyAwMDAwMCBuIAowMDAwMDAyNzEwIDAwMDAwIG4gCjAwMDAwMDI3MzAgMDAwMDAgbiAKMDAwMDAwMjc2MyAwMDAwMCBuIAowMDAwMDAzNzI1IDAwMDAwIG4gCjAwMDAwMDM3NDQgMDAwMDAgbiAKMDAwMDAwNDI4OCAwMDAwMCBuIAowMDAwMDA0MzA3IDAwMDAwIG4gCjAwMDAwMDQ1NjAgMDAwMDAgbiAKMDAwMDAwNDU4MCAwMDAwMCBuIAowMDAwMDA1MDkwIDAwMDAwIG4gCjAwMDAwMDQ5MTYgMDAwMDAgbiAKMDAwMDAwNDgwNSAwMDAwMCBuIAowMDAwMDA0OTc2IDAwMDAwIG4gCjAwMDAwMDUyNDMgMDAwMDAgbiAKdHJhaWxlcgo8PAogIC9Sb290IDE1IDAgUgogIC9JbmZvIDEgMCBSCiAgL0lEIFs8OUIxRkI3NUYzRjg5MzA0NUVBODhCODU0NjY2M0FBMjY+IDw5QjFGQjc1RjNGODkzMDQ1RUE4OEI4NTQ2NjYzQUEyNj5dCiAgL1NpemUgMTcKPj4Kc3RhcnR4cmVmCjUyODcKJSVFT0YK';
var bytes = Ax.util.Base64.decode(file);
var scanner = new Ax.barcode.Scanner();
scanner.setImageFilter(new Ax.barcode.filter.RotateFilter(90), new Ax.barcode.filter.RotateFilter(90), new Ax.barcode.filter.RotateFilter(90));
var result = scanner.scanPDF(bytes);
console.log(result);
ABCabc123

In the previous example the Scanner will search the image normally, rotate it 90º and scan it, rotate it 90º more degrees (180º in total) and scan it, and rotate it 90º more degrees (270º in total) and scan it.

2.2.3 Reset filter

The reset filter can be used to reset a filter (or more). Useful so the following filter is applied to the original image.

ResetFilter() Resets (undoes) the previous filters.

Look at the following example:

Copy
var file = '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YW0KZW5kb2JqCjMgMCBvYmoKMjQ3MgplbmRvYmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+eC11bmtub3duPC9kYzpsYW5ndWFnZT4KPGRjOmRhdGU+MjAyMS0wMi0wOVQwOToyNjo1MiswMTowMDwvZGM6ZGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIiByZGY6YWJvdXQ9IiI+CjxwZGY6UHJvZHVjZXI+QXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzI8L3BkZjpQcm9kdWNlcj4KPHBkZjpQREZWZXJzaW9uPjEuNDwvcGRmOlBERlZlcnNpb24+CjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgcmRmOmFib3V0PSIiPgo8eG1wOkNyZWF0b3JUb29sPkFwYWNoZSBGT1AgVmVyc2lvbiAwLjAuMjMyPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMjEtMDItMDlUMDk6MjY6NTIrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTAyLTA5VDA5OjI2OjUyKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjwvcmRmOlJERj4KPC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0iciI/PgoKZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjg3MwplbmRvYmoKNyAwIG9iago8PAogIC9OYW1lIC9JbTEKICAvVHlwZSAvWE9iamVjdAogIC9MZW5ndGggOCAwIFIKICAvRmlsdGVyIC9GbGF0ZURlY29kZQogIC9TdWJ0eXBlIC9JbWFnZQogIC9XaWR0aCA0NQogIC9IZWlnaHQgODYKICAvQml0c1BlckNvbXBvbmVudCA4CiAgL0NvbG9yU3BhY2UgWy9JQ0NCYXNlZCAyIDAgUl0KPj4Kc3RyZWFtCnic7ZRJDoUwDEO5/6X/32QHWLYbaoTylh3ioYjjGIZh0Pi9g3QNRbqGIl1Dka6hSNdQpGsYLkh/FLcAh5EUkuj5DLMiDfSMSYif0q0NaYWJI6kzRYFbi6KShKTVpd7Vhnfd22LUvcOejcVc4Iw3sMshmPOcjfY5UooNScGKZ5Vh8TozsF3iOe4+lc1IDp9LwYgyW4wxKeDiQO+MlGtxq+spQXVMq1JkLw6QYBxKA7skwGQvu5RLMi+tMFY9h5Kf9sNeLikFwDPG+JGuMwOBZ2+OpMVsMcbALUli55wszCtv4OwHOASHmVzZ7J5DKTKzJU1m6mW2GPWuNjZM9kSZ7GBgu5Z0i4kseWaMSZEXtbpEGRhj0tZOLakosCXFAdeZOdJKl3kpIIjcvuL5+QbgKYdheBvpH0aRrqFI1zBckP4oinQNRbqGIl3Du0i/RvEHlG+4UwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMzM5CmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nHWPvQrCQBCE+3uKLbVwsz+X5K4VIyoBCRxYiJWgVZC8f+OeSVACcsXCzs18O4NjIHubPEJJqFHh3rth2jOwR651HiZ1Jn4M+ce0DlqhyKz+tZrEimockhErXGEVKUYPHCMyVUQKwgHVUwwhu4pjz7B7WTTB022TK/YWKpAe3+OVBX3OqdW4BuEQLKn0kHq4ruDQtO35sr5BOrkmTR14rF0GNrAsKi5K/Dbs3BsSPD13CmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKMTc4CmVuZG9iagoxMSAwIG9iago8PAogIC9SZXNvdXJjZXMgMTIgMCBSCiAgL1R5cGUgL1BhZ2UKICAvTWVkaWFCb3ggWzAgMCA1OTUuMjc1IDg1MC4zOTNdCiAgL0Nyb3BCb3ggWzAgMCA1OTUuMjc1IDg1MC4zOTNdCiAgL0JsZWVkQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9UcmltQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9QYXJlbnQgMTMgMCBSCiAgL0NvbnRlbnRzIDkgMCBSCj4+CmVuZG9iagoxNCAwIG9iago8PAogIC9UeXBlIC9Gb250CiAgL1N1YnR5cGUgL1R5cGUxCiAgL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAogIC9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvUGFnZXMKL0NvdW50IDEKL0tpZHMgWzExIDAgUiBdID4+CmVuZG9iagoxNSAwIG9iago8PAogIC9UeXBlIC9DYXRhbG9nCiAgL1BhZ2VzIDEzIDAgUgogIC9MYW5nICh4LXVua25vd24pCiAgL01ldGFkYXRhIDUgMCBSCiAgL1BhZ2VMYWJlbHMgMTYgMCBSCj4+CmVuZG9iagoxMiAwIG9iago8PAogIC9Gb250IDw8IC9GMyAxNCAwIFIgPj4KICAvUHJvY1NldCBbL1BERiAvSW1hZ2VCIC9JbWFnZUMgL1RleHRdCiAgL1hPYmplY3QgPDwgL0ltMSA3IDAgUiA+PgogIC9Db2xvclNwYWNlIDw8IC9EZWZhdWx0UkdCIDQgMCBSID4+Cj4+CmVuZG9iagoxNiAwIG9iago8PCAvTnVtcyBbMCA8PCAvUyAvRCA+Pl0gPj4KZW5kb2JqCnhyZWYKMCAxNwowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDE1MyAwMDAwMCBuIAowMDAwMDAyNzEwIDAwMDAwIG4gCjAwMDAwMDI3MzAgMDAwMDAgbiAKMDAwMDAwMjc2MyAwMDAwMCBuIAowMDAwMDAzNzI1IDAwMDAwIG4gCjAwMDAwMDM3NDQgMDAwMDAgbiAKMDAwMDAwNDI4OCAwMDAwMCBuIAowMDAwMDA0MzA3IDAwMDAwIG4gCjAwMDAwMDQ1NjAgMDAwMDAgbiAKMDAwMDAwNDU4MCAwMDAwMCBuIAowMDAwMDA1MDkwIDAwMDAwIG4gCjAwMDAwMDQ5MTYgMDAwMDAgbiAKMDAwMDAwNDgwNSAwMDAwMCBuIAowMDAwMDA0OTc2IDAwMDAwIG4gCjAwMDAwMDUyNDMgMDAwMDAgbiAKdHJhaWxlcgo8PAogIC9Sb290IDE1IDAgUgogIC9JbmZvIDEgMCBSCiAgL0lEIFs8OUIxRkI3NUYzRjg5MzA0NUVBODhCODU0NjY2M0FBMjY+IDw5QjFGQjc1RjNGODkzMDQ1RUE4OEI4NTQ2NjYzQUEyNj5dCiAgL1NpemUgMTcKPj4Kc3RhcnR4cmVmCjUyODcKJSVFT0YK';
var bytes = Ax.util.Base64.decode(file);
var scanner = new Ax.barcode.Scanner();
scanner.setImageFilter(new Ax.barcode.filter.RotateFilter(90), new Ax.barcode.filter.ResetFilter(), new Ax.barcode.filter.RotateFilter(-90));
var result = scanner.scanPDF(bytes);
console.log(result);
ABCabc123

In the previous example the Scanner will search the image normally, rotate it 90º and scan it, reset the filters (undoing the previous rotation), and rotate it -90º and scan it.

2.2.4 Region filter

The region filter works the same way as the Scanner with specified width and height. This filter will re-scan the image returned by the previous filter scanning all regions with the defined widh and height, and moving each time the region 'step' number of pixels.

RegionFilter(int width, int height, int step) Scans the image generated from the previous filters scanning all regions with the specified widht and height and moving each time the region 'step' number of pixels.

Look at the following example:

Copy
var file = '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YW0KZW5kb2JqCjMgMCBvYmoKMjQ3MgplbmRvYmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+eC11bmtub3duPC9kYzpsYW5ndWFnZT4KPGRjOmRhdGU+MjAyMS0wMi0wOVQwOToxODo0NyswMTowMDwvZGM6ZGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIiByZGY6YWJvdXQ9IiI+CjxwZGY6UHJvZHVjZXI+QXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzI8L3BkZjpQcm9kdWNlcj4KPHBkZjpQREZWZXJzaW9uPjEuNDwvcGRmOlBERlZlcnNpb24+CjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgcmRmOmFib3V0PSIiPgo8eG1wOkNyZWF0b3JUb29sPkFwYWNoZSBGT1AgVmVyc2lvbiAwLjAuMjMyPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMjEtMDItMDlUMDk6MTg6NDcrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTAyLTA5VDA5OjE4OjQ3KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjwvcmRmOlJERj4KPC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0iciI/PgoKZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjg3MwplbmRvYmoKNyAwIG9iago8PAogIC9OYW1lIC9JbTEKICAvVHlwZSAvWE9iamVjdAogIC9MZW5ndGggOCAwIFIKICAvRmlsdGVyIC9GbGF0ZURlY29kZQogIC9TdWJ0eXBlIC9JbWFnZQogIC9XaWR0aCA4NgogIC9IZWlnaHQgNDUKICAvQml0c1BlckNvbXBvbmVudCA4CiAgL0NvbG9yU3BhY2UgWy9JQ0NCYXNlZCAyIDAgUl0KPj4Kc3RyZWFtCnic7ZFLDgMhDEO5/6XpolJF4w+oGtKNWYwEiWPnzRj8zDnx+z6mDavl0Q+cyzFJsBmtUf7pUWlDIASeIrAamWzbvbYSVIVACDQTUCuURaikhKFC5Y6/wEALgRC4SoB2npQMOgMNJ6DQLxICIfA4Acw2vw9KqLtS0SRFQq8hEAJtBE4SYklJ1iu6+Dl+nRAIgXsE6BwankrKO84xFmW4+jUhEAK3CSgXGvIwlYpKHbcuIRACVwngELpmkVB5ESrONPb214RACPQQwEiKgNoRS8ZFXUMgBJoJqDm4gjLCPFjaGimkIRAC/QTMTJQYlwJwu8sAkiEQAm0EVGb6rnzpLn4adiLnEAiBHgJ+Pl7LKPRa389dKI0QCIH/ElBV30PjUSESKF4hEAI/EHgBkjK4UwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMzAzCmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nHVPvQrCQAze7yky6mCaXHrXyypWVApSOHAQJ0GnIn3/xdS2KAW5IVy+fH+9YyB7m2GkQCgqcO9cP+0ZuESuZB4GtQZ+CMPFtE4S0fsZ/Us1iAXFfMiPtkFRfFJVYFVkikQCkVArHQjFsWPYvUyV4Om22RV70/OQH9/cwh5LJdVK7FNioGh6WkHu4LqCQ90058v6Bvnk6jyl57FwSGyeflFuEf+3W+veudU8bgplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjE3MwplbmRvYmoKMTEgMCBvYmoKPDwKICAvUmVzb3VyY2VzIDEyIDAgUgogIC9UeXBlIC9QYWdlCiAgL01lZGlhQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9Dcm9wQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9CbGVlZEJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvVHJpbUJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvUGFyZW50IDEzIDAgUgogIC9Db250ZW50cyA5IDAgUgo+PgplbmRvYmoKMTQgMCBvYmoKPDwKICAvVHlwZSAvRm9udAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQKICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzCi9Db3VudCAxCi9LaWRzIFsxMSAwIFIgXSA+PgplbmRvYmoKMTUgMCBvYmoKPDwKICAvVHlwZSAvQ2F0YWxvZwogIC9QYWdlcyAxMyAwIFIKICAvTGFuZyAoeC11bmtub3duKQogIC9NZXRhZGF0YSA1IDAgUgogIC9QYWdlTGFiZWxzIDE2IDAgUgo+PgplbmRvYmoKMTIgMCBvYmoKPDwKICAvRm9udCA8PCAvRjMgMTQgMCBSID4+CiAgL1Byb2NTZXQgWy9QREYgL0ltYWdlQiAvSW1hZ2VDIC9UZXh0XQogIC9YT2JqZWN0IDw8IC9JbTEgNyAwIFIgPj4KICAvQ29sb3JTcGFjZSA8PCAvRGVmYXVsdFJHQiA0IDAgUiA+Pgo+PgplbmRvYmoKMTYgMCBvYmoKPDwgL051bXMgWzAgPDwgL1MgL0QgPj5dID4+CmVuZG9iagp4cmVmCjAgMTcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAxNTMgMDAwMDAgbiAKMDAwMDAwMjcxMCAwMDAwMCBuIAowMDAwMDAyNzMwIDAwMDAwIG4gCjAwMDAwMDI3NjMgMDAwMDAgbiAKMDAwMDAwMzcyNSAwMDAwMCBuIAowMDAwMDAzNzQ0IDAwMDAwIG4gCjAwMDAwMDQyNTIgMDAwMDAgbiAKMDAwMDAwNDI3MSAwMDAwMCBuIAowMDAwMDA0NTE5IDAwMDAwIG4gCjAwMDAwMDQ1MzkgMDAwMDAgbiAKMDAwMDAwNTA0OSAwMDAwMCBuIAowMDAwMDA0ODc1IDAwMDAwIG4gCjAwMDAwMDQ3NjQgMDAwMDAgbiAKMDAwMDAwNDkzNSAwMDAwMCBuIAowMDAwMDA1MjAyIDAwMDAwIG4gCnRyYWlsZXIKPDwKICAvUm9vdCAxNSAwIFIKICAvSW5mbyAxIDAgUgogIC9JRCBbPDgxMkNFOTQxOEEwMEFFMkM3QjM2NTY1RTBCNUU4QzdDPiA8ODEyQ0U5NDE4QTAwQUUyQzdCMzY1NjVFMEI1RThDN0M+XQogIC9TaXplIDE3Cj4+CnN0YXJ0eHJlZgo1MjQ2CiUlRU9GCg==';
var bytes = Ax.util.Base64.decode(file);
var scanner = new Ax.barcode.Scanner();
scanner.setImageFilter(new Ax.barcode.filter.CropNorthFilter(), new Ax.barcode.filter.RegionFilter(400, 200, 10), new Ax.barcode.filter.ResetFilter(), new Ax.barcode.filter.CropSouthFilter(), new Ax.barcode.filter.RegionFilter(400, 200, 10));
var result = scanner.scanPDF(bytes);
console.log(result);
ABCabc123

In the previous example the Scanner will crop the north half of the image and keep it, re-scan it, reset the previous filter, crop the south half of the image and keep it, and re-scan it.

2.3 Example

For the following example we are going to use this scanned image:

As we can see, the image is not in optimal conditions. Now we are going to read its main barcode. Let's look at the example:

Copy
var file = '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YW0KZW5kb2JqCjMgMCBvYmoKMjQ3MgplbmRvYmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+eC11bmtub3duPC9kYzpsYW5ndWFnZT4KPGRjOmRhdGU+MjAyMS0wMi0wOVQwOToxODo0NyswMTowMDwvZGM6ZGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjxyZGY6RGVzY3JpcHRpb24geG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIiByZGY6YWJvdXQ9IiI+CjxwZGY6UHJvZHVjZXI+QXBhY2hlIEZPUCBWZXJzaW9uIDAuMC4yMzI8L3BkZjpQcm9kdWNlcj4KPHBkZjpQREZWZXJzaW9uPjEuNDwvcGRmOlBERlZlcnNpb24+CjwvcmRmOkRlc2NyaXB0aW9uPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgcmRmOmFib3V0PSIiPgo8eG1wOkNyZWF0b3JUb29sPkFwYWNoZSBGT1AgVmVyc2lvbiAwLjAuMjMyPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMjEtMDItMDlUMDk6MTg6NDcrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDIxLTAyLTA5VDA5OjE4OjQ3KzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KPC9yZGY6RGVzY3JpcHRpb24+CjwvcmRmOlJERj4KPC94OnhtcG1ldGE+PD94cGFja2V0IGVuZD0iciI/PgoKZW5kc3RyZWFtCmVuZG9iago2IDAgb2JqCjg3MwplbmRvYmoKNyAwIG9iago8PAogIC9OYW1lIC9JbTEKICAvVHlwZSAvWE9iamVjdAogIC9MZW5ndGggOCAwIFIKICAvRmlsdGVyIC9GbGF0ZURlY29kZQogIC9TdWJ0eXBlIC9JbWFnZQogIC9XaWR0aCA4NgogIC9IZWlnaHQgNDUKICAvQml0c1BlckNvbXBvbmVudCA4CiAgL0NvbG9yU3BhY2UgWy9JQ0NCYXNlZCAyIDAgUl0KPj4Kc3RyZWFtCnic7ZFLDgMhDEO5/6XpolJF4w+oGtKNWYwEiWPnzRj8zDnx+z6mDavl0Q+cyzFJsBmtUf7pUWlDIASeIrAamWzbvbYSVIVACDQTUCuURaikhKFC5Y6/wEALgRC4SoB2npQMOgMNJ6DQLxICIfA4Acw2vw9KqLtS0SRFQq8hEAJtBE4SYklJ1iu6+Dl+nRAIgXsE6BwankrKO84xFmW4+jUhEAK3CSgXGvIwlYpKHbcuIRACVwngELpmkVB5ESrONPb214RACPQQwEiKgNoRS8ZFXUMgBJoJqDm4gjLCPFjaGimkIRAC/QTMTJQYlwJwu8sAkiEQAm0EVGb6rnzpLn4adiLnEAiBHgJ+Pl7LKPRa389dKI0QCIH/ElBV30PjUSESKF4hEAI/EHgBkjK4UwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMzAzCmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGggMTAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nHVPvQrCQAze7yky6mCaXHrXyypWVApSOHAQJ0GnIn3/xdS2KAW5IVy+fH+9YyB7m2GkQCgqcO9cP+0ZuESuZB4GtQZ+CMPFtE4S0fsZ/Us1iAXFfMiPtkFRfFJVYFVkikQCkVArHQjFsWPYvUyV4Om22RV70/OQH9/cwh5LJdVK7FNioGh6WkHu4LqCQ90058v6Bvnk6jyl57FwSGyeflFuEf+3W+veudU8bgplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjE3MwplbmRvYmoKMTEgMCBvYmoKPDwKICAvUmVzb3VyY2VzIDEyIDAgUgogIC9UeXBlIC9QYWdlCiAgL01lZGlhQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9Dcm9wQm94IFswIDAgNTk1LjI3NSA4NTAuMzkzXQogIC9CbGVlZEJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvVHJpbUJveCBbMCAwIDU5NS4yNzUgODUwLjM5M10KICAvUGFyZW50IDEzIDAgUgogIC9Db250ZW50cyA5IDAgUgo+PgplbmRvYmoKMTQgMCBvYmoKPDwKICAvVHlwZSAvRm9udAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQKICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzCi9Db3VudCAxCi9LaWRzIFsxMSAwIFIgXSA+PgplbmRvYmoKMTUgMCBvYmoKPDwKICAvVHlwZSAvQ2F0YWxvZwogIC9QYWdlcyAxMyAwIFIKICAvTGFuZyAoeC11bmtub3duKQogIC9NZXRhZGF0YSA1IDAgUgogIC9QYWdlTGFiZWxzIDE2IDAgUgo+PgplbmRvYmoKMTIgMCBvYmoKPDwKICAvRm9udCA8PCAvRjMgMTQgMCBSID4+CiAgL1Byb2NTZXQgWy9QREYgL0ltYWdlQiAvSW1hZ2VDIC9UZXh0XQogIC9YT2JqZWN0IDw8IC9JbTEgNyAwIFIgPj4KICAvQ29sb3JTcGFjZSA8PCAvRGVmYXVsdFJHQiA0IDAgUiA+Pgo+PgplbmRvYmoKMTYgMCBvYmoKPDwgL051bXMgWzAgPDwgL1MgL0QgPj5dID4+CmVuZG9iagp4cmVmCjAgMTcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAxNTMgMDAwMDAgbiAKMDAwMDAwMjcxMCAwMDAwMCBuIAowMDAwMDAyNzMwIDAwMDAwIG4gCjAwMDAwMDI3NjMgMDAwMDAgbiAKMDAwMDAwMzcyNSAwMDAwMCBuIAowMDAwMDAzNzQ0IDAwMDAwIG4gCjAwMDAwMDQyNTIgMDAwMDAgbiAKMDAwMDAwNDI3MSAwMDAwMCBuIAowMDAwMDA0NTE5IDAwMDAwIG4gCjAwMDAwMDQ1MzkgMDAwMDAgbiAKMDAwMDAwNTA0OSAwMDAwMCBuIAowMDAwMDA0ODc1IDAwMDAwIG4gCjAwMDAwMDQ3NjQgMDAwMDAgbiAKMDAwMDAwNDkzNSAwMDAwMCBuIAowMDAwMDA1MjAyIDAwMDAwIG4gCnRyYWlsZXIKPDwKICAvUm9vdCAxNSAwIFIKICAvSW5mbyAxIDAgUgogIC9JRCBbPDgxMkNFOTQxOEEwMEFFMkM3QjM2NTY1RTBCNUU4QzdDPiA8ODEyQ0U5NDE4QTAwQUUyQzdCMzY1NjVFMEI1RThDN0M+XQogIC9TaXplIDE3Cj4+CnN0YXJ0eHJlZgo1MjQ2CiUlRU9GCg==';
var scanner = new Ax.barcode.Scanner();
var result1 = scanner.scanImage(file);
var scanner = new Ax.barcode.Scanner();
scanner.setImageFilter(new Ax.barcode.filter.CropNorthEastFilter(), new Ax.barcode.filter.CropNorthFilter());
var result2 = scanner.scanImage(file);
var result = {
    'result1': result1,
    'result2': result2,
};
console.log(result);
{
  "result2": "S50075",
  "result1": null
}

As we can see, the Scanner is not able to read the barcode by default, so we use the adequate filters to make the Scanner's work easier. In this case we crop the image until we isolate the barcode.

3 Linux tools

An alternative option to read barcode is to use Linux tools like ImageMagick and zbarimg

To install zbarimg on mac use:

Copy
brew install zbar

This automatically installs convert which is the alias to run ImageMagick on mac.

The following example is a MacOS shell to scan barcodes form a series of PDF files using convert (ImageMagick) and zbarimg.

Copy
OIFS="$IFS"
IFS=$'\n'
for PDF in `find . -type f -name "*.pdf"`; do

    echo "Processing file $PDF"
    rm -f tmp/*.png
    
    # Convert the PDF into a series of images (one for each page)
    # It's critical to convert PDF with maximum quality
    # Also we use the morphology operator
    convert -density 300 -quality 100 -trim -morphology open square:1 -threshold 76% $PDF tmp/page_%04d.png

    # Read each page and seach barcodes
    for PAGE in `find tmp -type f -name "*.png"`; do
        echo " === file $PDF page $PAGE"
        zbarimg -q $PAGE
    done
done
It's critical to convert images to optimum quality. The morphology operator can also be used to improve poor quality scanned images. The examples below show de differences. Click on image to zoom it.
Original Processed with morphology operator

3.1 Linux install

zbar can be installed on Linux

  • On Fedora Linux
    Copy
    dnf install https://pkgs.dyn.su/el8/base/x86_64/zbar-0.22-1.el8.x86_64.rpm
    
    dnf install https://rpmfind.net/linux/epel/7/x86_64/Packages/z/zbar-0.10-27.el7.x86_64.rpm