Невозможно заставить Pdf417Scanner работать как плагин с Cordova/PhoneGap

Я пытаюсь заставить плагин Pdf417Scanner ( https://github.com/PDF417/pdf417-phonegap) работать с Cordova/PhoneGap.

Вот что я сделал до сих пор.

  1. Создан новый проект с использованием PhoneGap (с Framework7 для пользовательского интерфейса)
  2. Добавлен плагин, используя команду phonegap plugin add pdf417-phonegap
  3. Добавлена ​​платформа Android с помощью команды phonegap platform add android

Фрагмент кода JavaScript, который вызывает Pdf417Scanner для сканирования. Большая часть этого кода прямо из документации проекта Github.

$$(document).on('deviceready', function() {
    console.log("Device is ready!");

    $$('#scan').on('click', function () {
        console.log("Inside the scan click");

        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
        };

        var licenseiOs = "sRwAAAEQbW9iaS5wZGY0MTcuZGVtbz/roBZ34ygXMQRMupTjSPXnoj0Mz1jPfk1iRX7f78Ux6a+pfXVyW0HCjPTxl5ocxgXWF66PTrtFUbJFCDUpyznreSWY4akvhvqVFfcTYgVEKjB+UqO6vPD5iIaUCaEYhF4dVmM=";

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

        cordova.plugins.pdf417Scanner.scan(
            // Register the callback handler
            function callback(scanningResult) {

                // handle cancelled scanning
                if (scanningResult.cancelled == true) {
                    myApp.alert("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>";
                }
                myApp.alert(resToShow);
            },

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

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

Это добраться до console.log("Inside the scan click"); часть; но не уверен, что произойдет после того, как он попадет cordova.plugins.pdf417Scanner.scan - это просто не работает. Просто чтобы уточнить, я тестирую это прямо на моем телефоне Android (с помощью Android 7).

Есть идеи? Кто-нибудь использовал эту библиотеку / плагин?

1 ответ

Решение

Проблема в том, что кто-то зарегистрирован pdf417-phonegap на NPM до PDF417 команда делала, поэтому при установке плагина вот так phonegap plugin add pdf417-phonegap, вы не получите https://github.com/PDF417/pdf417-phonegap, но https://github.com/alejonext/pdf417-phonegap, который является другим плагином, и он устарел.

Для установки плагина сделайте это:

git clone https://github.com/PDF417/pdf417-phonegap
phonegap plugin add pdf417-phonegap/Pdf417/

изнутри вашего текущего проекта, или вы можете сделать это снаружи и изменить pdf417-phonegap/Pdf417/ к пути вашего клона, но убедитесь, что вы сохранили /Pdf417/ часть, так как они имеют плагин внутри этой папки, а не в корне.

Я проверил это, и сканер работает, я просто получаю сообщение об ошибке hex2a так как у меня не было этой функции.

Но вы можете выбрать его из их кода https://github.com/PDF417/pdf417-phonegap/blob/master/www/js/index.js#L21-L27:

function hex2a(hex) {
    var str = '';
    for (var i = 0; i < hex.length; i += 2) {
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    }
    return str;
}
Другие вопросы по тегам