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