当前位置: 首页 > 知识库问答 >
问题:

在Ionic中调用Pdf417 phonegap/cordova插件

潘飞英
2023-03-14

我在Ionic应用程序中以演示模式成功调用Pdf417 phonegap/cordova插件扫描功能时遇到麻烦。我正在iOS上使用Ionic View测试插件。

这里是一个链接的Github存储库,其中包含应用程序的简化版本,只有一个状态和控制器。

不幸的是,当我测试它时,我完全弄不明白为什么这不起作用。我在浏览器中遇到一个错误,说“cordova未定义”,我认为这是因为cordova插件在浏览器中应该是404,但在Ionic View中也不起作用。

在尝试进行此操作之前,我已使用“cordova plugin add(pdf417 git repo的位置)”成功安装了该插件。

任何帮助都将不胜感激。我没有太多的经验,所以我可能总体上走错了方向,如果我走错了,请提前道歉。任何指导都会有所帮助。如果我有什么不清楚的地方,我很乐意详细说明。我肯定我错过了一些必要的信息。

这是我的应用程序。来自应用程序的js:

angular.module('app', ['ionic'])
/**
* RUN
*/

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }

  });
})

/**
* CONTROLLERS
*/
//Workflow Controller
.controller('workflowCtrl', ['$scope', '$ionicPlatform', '$ionicPopup',
function($scope, $ionicPlatform, $ionicPopup) {
  $ionicPlatform.ready(function() {
    //***PDF417 SCANNER***
    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;
    }
    var types = ["PDF417", "QR Code"];
    var options = {
        beep : true,  // Beep on
        noDialog : true,
        uncertain : false, //Recommended
        quietZone : false, //Recommended
        highRes : false, //Recommended
        inverseScanning: false,
        frontFace : false
    };
    var licenseiOs = null;
    var licenseAndroid = null;
    $scope.barcodeResult;
    $scope.fields;
    $scope.scan = function() {
      $ionicPopup.alert({
        title:'Scan Button Clicks',
      });
      console.log('Scan Button Clicks');
      cordova.plugins.pdf417Scanner.scan(
        // Register the callback handler
        function callback(scanningResult) {
          // handle cancelled scanning
          if (scanningResult.cancelled == true) {
            console.log('Scanner cancelled');
            $scope.warnings = "Cancelled";
            return;
          }
          // Obtain list of recognizer results
          var resultList = scanningResult.resultList;
          // Iterate through all results
          for (var i = 0; i < resultList.length; i++) {
            // Get individual resilt
            var recognizerResult = resultList[i];
            if (recognizerResult.resultType == "Barcode result") {
              // handle Barcode scanning result
              if (typeof(recognizerResult.raw) != "undefined" && recognizerResult.raw != null) {
                var raw = hex2a(recognizerResult.raw);
              }
              $scope.barcodeResult = {
                "Data": recognizerResult.data,
                "Raw": raw,
                "Type": recognizerResult.type
              };
            } else if (recognizerResult.resultType == "USDL result") {
              // handle USDL parsing result
              var fields = recognizerResult.fields;
              $scope.fields = {
                /** Personal information */
                "USDL version": fields[kPPAamvaVersionNumber],
                "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]
              };
            }
          }
        },
        // Register the error callback
        function errorHandler(err) {
          console.log("error: " + err);
          $scope.warnings = err;
        },
        types, options, licenseiOs, licenseAndroid
      );
    };
    //***END PDF417 SCANNER***
  });
}])

/**
* ROUTING
*/
.config(function($ionicConfigProvider, $stateProvider, $urlRouterProvider)
{

  $ionicConfigProvider.tabs.position('bottom');
  $ionicConfigProvider.tabs.style('striped');
  $ionicConfigProvider.navBar.alignTitle('center');

  $urlRouterProvider.otherwise('/tab/workflow');

  $stateProvider
  // setup an abstract state for the tabs directive
    .state('tab', {
      url: '/tab',
      abstract: true,
      templateUrl: 'partials/tab.html'
    })
  // Each tab has its own nav history stack:
    .state('tab.workflow', {
      url: '/workflow',
      views: {
        'tab-workflow': {
          templateUrl: 'partials/tab-workflow.html',
          controller: 'workflowCtrl'
        }
      }
    })
});

此外,当我点击按钮启动带有“ionic emulate ios”的pdf417以运行模拟器时,这是我的系统日志。

THREAD WARNING: [‘Pdf416Scanner’] took ’12.760742’ ms.
Plugin should use a background thread.

更新:这个错误是预料之中的,因为模拟器中没有外设,尽管在ionic view(目前使用iOS)中测试时,我在中仍然没有功能。

共有1个答案

裴英才
2023-03-14

你的问题的答案很简单:Ionic View只支持有限数量的插件(目前),你的不在列表中。

一开始支持更少,但增加了更多。

以下是相关链接:http://docs.ionic.io/v1.0/docs/view-usage

我建议通过USB部署到设备。

 类似资料:
  • 我有以下问题,我需要完全禁用本机键盘。键盘应该只在我调用show()时显示,在我调用close()函数时隐藏(这将出现在用户切换键盘的按钮上)。需要完全禁用显示单击字段和焦点的键盘。 在Stackoverflow上,我发现了以下内容:InputMethodManager im=(InputMethodManager)getSystemService(Context.INPUT\u METHOD\u

  • 我试图运行我的Ionic应用程序在Android设备与cordov-plugin-fcm,但我得到下面的错误,当我尝试安装它()或运行它()。尽管有错误,但该插件仍列在科尔多瓦插件中。 (node:2360)unhandledpromiserejection warning:未处理的promise拒绝(拒绝id: 1): TypeError:无效数据,chunk必须是字符串或缓冲区,而不是对象(n

  • 我有麻烦-使用ionic创建一个android构建。它最初运行良好。我尝试将android目标平台更改为19-这是4.4.2 kitkat。 这是错误消息-显然cordova文件插件有问题。当我将平台sdk目标更改为19时。 任何帮助将不胜感激。 /myapp/platforms/android/src/org/apache/cordova/file/LocalFilesystem.java:41

  • 是的,我搜索了这个,但没有,只是关于ANDROID_HOME路径的东西,但在我的情况下,我不认为这是真正的问题。当我尝试执行时,我得到以下错误: 错误:在android SDK中找不到gradle包装器。可能需要更新你的Android SDK。查看此处:C:\Android\SDK\tools\templates\gradle\wrapper 并发现在中没有“模板”文件夹,只有以下内容:

  • 嗨,我有很多测试轮,但不能得到确切的解决方案,所以张贴帮助。 我的应用程序在Ionic not Ionic2中 使用plugin for network是“network Information”cordova plugin network Information 1.3.0“network Information”链接 脚本: 当用户最小化应用程序并转到后台并关闭WiFi、移动数据等网络源并返回

  • 我不知道在Cordova项目上使用ionic键盘插件是否有意义,我将其添加到我的Cordova IOS项目中,并在我的视图渲染中称为“Cordova.plugins.keyboard.show()”,这就是我得到的(没有键盘,只有附件栏)http://grab.by/BFX6皱眉 知道我做错了什么吗? 非常感谢!!