PDF417 / pdf417-phonegap

PDF417 and QR code scanning plugins for PhoneGap/Cordova framework
47 stars 21 forks source link

PDF417 SDK wrapper for PhoneGap

This repository contains example wrapper for PDF417 native SDKs (iOS and Android). Not all features of native SDKs are available in PhoneGap wrapper. However, the wrapper is open source, so you can easily add features that you need. For 100% of features and maximum control, consider using native SDKs.

Installation

First generate an empty project if needed:

cordova create <path> <package> <name>

The shown instructions are for Cordova, the instructions for PhoneGap are practically the same, except for some slight command line argument differences.

Add the pdf417 plugin to your project:

cd <path_to_your_project>

cordova plugin add <pdf417_plugin_path> # or pdf417-cordova if you don't have pdf417-phonegap locally

Android

Add Android platform support to the project:

cordova platform add android

iOS

If you want to add iOS as a platform for your application, you will need to install unzip and wget. Currently cordova plugin uses a hook script, that runs before adding ios platform, to download pdf417 framework and bundle from github.

Add iOS plaform support to the project:

cordova platform add ios

Sample

Here's a complete example of how to create and build a project for Android and iOS using cordova (you can substitute equivalent commands for phonegap):

# pull the plugin and sample application from Github
git clone https://github.com/PDF417/pdf417-phonegap.git

# initialize and update submodules
git submodule init
git submodule update

# create a empty application
cordova create testcordova

cd testcordova

# add the pdf417 plugin
cordova plugin add ../pdf417-phonegap/Pdf417

# add android support to the project
cordova platform add android@7

# build the project, the binary will appear in the bin/ folder
cordova build android

# add ios support to the project
cordova platform add ios

# build the project
cordova build ios

In phonegap CLI instead of "platform add" just request a build for the platform using "build android" or "build ios". You will have to do the manual steps described above to be able to do a successfull build.

You can also use provided initDemoApp.sh script that will generate a demo app that uses the plugin:

./initDemoApp.sh

To run the script, you'll need BASH environment on Windows (Linux and MacOS use BASH by default).

Usage

To use the plugin you call it in your Javascript code like the demo application:

/**
 * Scan these barcode types
 * Available: "PDF417", "USDL", "QR Code", "Code 128", "Code 39", "EAN 13", "EAN 8", "ITF", "UPCA", "UPCE"
 */
var types = ["PDF417", "QR Code"];

/**
 * Initiate scan with options
 * NOTE: Some features are unavailable without a license
 * Obtain your key at http://pdf417.mobi
 */
var options = {
    beep : true,  // Beep on
    noDialog : true, // Skip confirm dialog after scan
    uncertain : false, //Recommended
    quietZone : false, //Recommended
    highRes : false, //Recommended
    inverseScanning: false,
    frontFace : false
};

// Note that each platform requires its own license key

// This license key allows setting overlay views for this application ID: mobi.pdf417.demo
// Valid until 2018-06-04
var licenseiOs = "sRwAAAEQbW9iaS5wZGY0MTcuZGVtbz/roBZ34ygXMQRMupTjSPXnoj0Mz1jPfk1iRX7f78Ux6a+pfXVyW0HCjPTxl5ocxgXWF66PTrtFUbJFCDUpyznreSWY4akvhvqVFfcTYgVEKjB+UqO6vPD5iIaUCaEYhF4dVmM=";

// This license is only valid for package name "mobi.pdf417.demo"
var licenseAndroid = "sRwAAAAQbW9iaS5wZGY0MTcuZGVtb2uCzTSwE5Pixw1pJL5UEN7nyXbOdXB61Ysy/sgAYt4SaB0T/g6JvisLn6HtB8LzLDmpFjULMxmB8iLsy3tFdHtMhLWOM6pr0tQmSLGyhrXfe6rVoHAxJtPrFEoCNTk4RjLltQ==";

scanButton.addEventListener('click', function() {
    cordova.plugins.pdf417Scanner.scan(

        // Register the callback handler
        function callback(scanningResult) {

            // handle cancelled scanning
            if (scanningResult.cancelled == true) {
                resultDiv.innerHTML = "Cancelled!";
                return;
            }

            // Obtain list of recognizer results
            var resultList = scanningResult.resultList;

            var resToShow = "";

            // Iterate through all results
            for (var i = 0; i < resultList.length; i++) {
                // Get individual resilt
                var recognizerResult = resultList[i];
                resToShow += "(Result type: " + recognizerResult.resultType + ") <br>"
                if (recognizerResult.resultType == "Barcode result") {
                    // handle Barcode scanning result
                    var raw = "";
                    if (typeof(recognizerResult.raw) != "undefined" && recognizerResult.raw != null) {
                        raw = " (raw: " + hex2a(recognizerResult.raw) + ")";
                    }
                    resToShow += "(Barcode type: " + recognizerResult.type + ")<br>"
                                 + "Data: " + recognizerResult.data + "<br>"
                                 + raw;
                } else if (recognizerResult.resultType == "USDL result") {
                    // handle USDL parsing result

                    var fields = recognizerResult.fields;

                    resToShow += /** Personal information */
                                "USDL version: " + fields[kPPStandardVersionNumber] + "; " +
                                "Family name: " + fields[kPPCustomerFamilyName] + "; " +
                                "First name: " + fields[kPPCustomerFirstName] + "; " +
                                "Date of birth: " + fields[kPPDateOfBirth] + "; " +
                                "Sex: " + fields[kPPSex] + "; " +
                                "Eye color: " + fields[kPPEyeColor] + "; " +
                                "Height: " + fields[kPPHeight] + "; " +
                                "Street: " + fields[kPPAddressStreet] + "; " +
                                "City: " + fields[kPPAddressCity] + "; " +
                                "Jurisdiction: " + fields[kPPAddressJurisdictionCode] + "; " +
                                "Postal code: " + fields[kPPAddressPostalCode] + "; " +

                                /** License information */
                                "Issue date: " + fields[kPPDocumentIssueDate] + "; " +
                                "Expiration date: " + fields[kPPDocumentExpirationDate] + "; " +
                                "Issuer ID: " + fields[kPPIssuerIdentificationNumber] + "; " +
                                "Jurisdiction version: " + fields[kPPJurisdictionVersionNumber] + "; " +
                                "Vehicle class: " + fields[kPPJurisdictionVehicleClass] + "; " +
                                "Restrictions: " + fields[kPPJurisdictionRestrictionCodes] + "; " +
                                "Endorsments: " + fields[kPPJurisdictionEndorsementCodes] + "; " +
                                "Customer ID: " + fields[kPPCustomerIdNumber] + "; ";
                }
                resToShow += "<br><br>";
            }
            resultDiv.innerHTML = resToShow;
        },

        // Register the error callback
        function errorHandler(err) {
            alert('Error: ' + err);
        },

        types, options, licenseiOs, licenseAndroid
    );
});

How to get started

Sample app is generated with a script

./initDemoApp.sh

To run iOS demo application open Xcode project Pdf417Demo.xcodeproj

To run Android demo application type

cd PDF417Demo
cordova run android