Advanced Conversion Options | JavaScriptByteScout Barcode Reader SDK

Advanced Conversion Options | JavaScript

app.js:

JavaScript
var https = require("https");

// Use "npm install request" command to install.
var request = require("request");

// The authentication key (API Key).
// Get your own by registering at https://app.pdf.co
const API_KEY = "***********************************";

// Direct URL of source file to search barcodes in.
// You can also upload your own file into PDF.co and use it as url. Check "Upload File" samples for code snippets: https://github.com/bytescout/pdf-co-api-samples/tree/master/File%20Upload/    
const SourceFileUrl = "https://bytescout-com.s3.amazonaws.com/files/demo-files/cloud-api/barcode-reader/sample.pdf";
// Comma-separated list of barcode types to search. 
// See valid barcode types in the documentation https://apidocs.pdf.co
const BarcodeTypes = "Code128,Code39,Interleaved2of5,EAN13";
// Comma-separated list of page indices (or ranges) to process. Leave empty for all pages. Example: '0,2-5,7-'.
const Pages = "";

/*
Some of advanced options available through profiles:
(JSON can be single/double-quoted and contain comments.)
{
    "profiles": [
        {
            "profile1": {
                "ScanArea": "WholePage", // Values: "TopLeftQuarter", "TopRightQuarter", "BottomRightQuarter", "BottomLeftQuarter", "TopHalf", "BottomHalf", "WholePage".
                "RequireQuietZones": true, // Whether the quite zone is obligatory for 1D barcodes. Values: true / false
                "MaxNumberOfBarcodesPerPage": 0, // 0 - unlimited.
                "MaxNumberOfBarcodesPerDocument": 0, // 0 - unlimited.
                "ScanStep": 1, // Scan interval for linear (1-dimensional) barcodes.
                "MinimalDataLength": 0, // Minimal acceptable length of decoded data.                
            }
        }
    ]
}*/

// Sample profile that sets advanced conversion options
//  Advanced options are properties of Reader class from Bytescout BarCodeReader used in the back-end:
// https://cdn.bytescout.com/help/BytescoutBarCodeReaderSDK/html/ba101d21-3db7-eb54-d112-39cadc023d02.htm
const Profiles = { "profiles": [{ "profile1": { "FastMode": true } }] };

// Prepare request to `Barcode Reader` API endpoint
var queryPath = `/v1/barcode/read/from/url`;

// JSON payload for api request
var jsonPayload = JSON.stringify({
    types: BarcodeTypes,
    pages: Pages,
    url: SourceFileUrl,
    profiles: Profiles,
    async=true
});

var reqOptions = {
    host: "api.pdf.co",
    method: "POST",
    path: queryPath,
    headers: {
        "x-api-key": API_KEY,
        "Content-Type": "application/json",
        "Content-Length": Buffer.byteLength(jsonPayload, 'utf8')
    }
};
// Send request
var postRequest = https.request(reqOptions, (response) => {
    response.on("data", (d) => {
        // Parse JSON response
        var data = JSON.parse(d);

        if (data.error == false) {
            console.log(`Job #${data.jobId} has been created!`);
            checkIfJobIsCompleted(data.jobId, data.url);
        }
        else {
            // Service reported error
            console.log(data.message);
        }
    });
}).on("error", (e) => {
    // Request error
    console.error(e);
});

// Write request data
postRequest.write(jsonPayload);
postRequest.end();


function checkIfJobIsCompleted(jobId, resultFileUrlJson) {
    let queryPath = `/v1/job/check?jobid=${jobId}`;

    // JSON payload for api request
    let jsonPayload = JSON.stringify({
        jobid: jobId
    });

    let reqOptions = {
        host: "api.pdf.co",
        path: queryPath,
        method: "POST",
        headers: {
            "x-api-key": API_KEY,
            "Content-Type": "application/json",
            "Content-Length": Buffer.byteLength(jsonPayload, 'utf8')
        }
    };

    var postRequest = https.request(reqOptions, (response) => {
        response.on("data", (d) => {
            response.setEncoding("utf8");

            // Parse JSON response
            let data = JSON.parse(d);
            console.log(`Checking Job #${jobId}, Status: ${data.status}, Time: ${new Date().toLocaleString()}`);

            if (data.status == "working") {
                // Check again after 3 seconds
                setTimeout(function () { checkIfJobIsCompleted(jobId, resultFileUrlJson); }, 3000);
            }
            else if (data.status == "success") {

                request({ method: 'GET', uri: resultFileUrlJson, gzip: true },
                    function (error, response, body) {

                        // Parse JSON response
                        let respJsonFileArray = JSON.parse(body);

                        respJsonFileArray.forEach((element) => {
                            console.log("Found barcode:");
                            console.log("  Type: " + element["TypeName"]);
                            console.log("  Value: " + element["Value"]);
                            console.log("  Document Page Index: " + element["Page"]);
                            console.log("  Rectangle: " + element["Rect"]);
                            console.log("  Confidence: " + element["Confidence"]);
                            console.log();
                        }, this);
                    });
            }
            else {
                console.log(`Operation ended with status: "${data.status}".`);
            }
        })
    });

    // Write request data
    postRequest.write(jsonPayload);
    postRequest.end();
}