Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Cordova插件和Ionic 3下载并查看pdf不工作_Android_Ios_Cordova_Pdf_Ionic Framework - Fatal编程技术网

Android 使用Cordova插件和Ionic 3下载并查看pdf不工作

Android 使用Cordova插件和Ionic 3下载并查看pdf不工作,android,ios,cordova,pdf,ionic-framework,Android,Ios,Cordova,Pdf,Ionic Framework,您好,我在尝试使用ionic 3在移动设备上打开pdf时遇到了一个问题。基本上,我从web服务获取pdf,解密文件后,我询问是从浏览器还是从应用程序打开。如果是从浏览器打开的,我使用应用程序内浏览器呈现pdf,它就像一个魔咒,没有问题,但当从移动设备(如应用程序)打开时,我采用不同的方法,下载文件并使用 文档查看器插件 文件 文件传输 下面是一些代码,首先我们调用web服务并订阅响应: clickBtn(e) { const loading = this.loadingController.c

您好,我在尝试使用ionic 3在移动设备上打开pdf时遇到了一个问题。基本上,我从web服务获取pdf,解密文件后,我询问是从浏览器还是从应用程序打开。如果是从浏览器打开的,我使用应用程序内浏览器呈现pdf,它就像一个魔咒,没有问题,但当从移动设备(如应用程序)打开时,我采用不同的方法,下载文件并使用

文档查看器插件 文件 文件传输

下面是一些代码,首先我们调用web服务并订阅响应:

clickBtn(e) {
 const loading = this.loadingController.create({
   content: ''
});
loading.present().then(() => {
  const productExtractsRq: ProductExtractsRq = this.extractRq;
  productExtractsRq.customer = this.bdbUtilsProvider.getCustomer();
  // get file from WEB SERVICE
  this.transactionsProvider.getProductExtracts(productExtractsRq).subscribe(
    (data) => {
      loading.dismiss();
      // CREATE THE PDF
      this.blob = this.createPdf(data);
      this.url = window.URL.createObjectURL(this.blob);
      // COMPARE WHICH PLATFORM IS ACCESSING THE APP
      if (this.platform.is('core') || this.platform.is('mobileweb')) {
        this.iab.create(this.url, '_system');
      } else {
        this.downloadAndOpenPdf(this.url);
      }
    },
    (ex) => {
      loading.dismiss();
      if (ex.status === 409) {
        this.tsErrorProvider.launchErrorModal(ex.error._error);
      } else {
        this.bdbModal.launchErrModal(
          'Ha ocurrido un error',
          'El extracto no se pudo generar, por favor intenta más tarde.',
          'Aceptar'
        );
      }
    }
  );
});
}
以下是应用程序何时打开的方法:

downloadAndOpenPdf(url: string) {
let path = null;

if (this.platform.is('ios')) {
  path = this.file.documentsDirectory;
} else if (this.platform.is('android')) {
  path = this.file.dataDirectory;
}

// this.document.viewDocument(url, 'application/pdf', {});

const transfer = this.transfer.create();
transfer.download(url, path + 'myfile.pdf').then(entry => {
  toast.present();
  const _url = entry.toURL();
  this.document.viewDocument(_url, 'application/pdf', {});
})
.catch(err => {
  alert(JSON.stringify(err));
  toast.present();
  this.iab.create(url, '_blank');
});
}
这里是createpdf方法,显然效果很好

createPdf<Blob>(data: ProductExtractsRs) {
const bytes: string = atob(atob(data.binData));
const byteNumbers = new Array(bytes.length);
for (let i = 0; i < bytes.length; i++) {
  byteNumbers[i] = bytes.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
return new Blob([byteArray], { type: 'application/pdf' });
}
没有其他事情发生,任何人都可以知道我做错了什么?请记住,使用web应用上的应用内浏览器打开pdf时不会出现问题。任何提示都将不胜感激

{
 "code":2,
 "source":"blob:file:///a44e17fc-1eb7-458a-9130-3d7b4f3a790b",
 "target": "file///data/user/0/io.ionic.starter/files/myfile.pdf",
 "http_status":null,
 "body": null,
 "exception": null
}