просто чтобы дополнить решение @Byka, мы должны установить его в ionic 3
- ionic cordova плагин добавить файл cordova-plugin-file
- npm установить --save @ ionic-native / file
- плагин ionic cordova добавить cordova-plugin-file-opener2
- npm установить --save @ ionic-native / file-opener
Важно дляПо какой-то причине writeFile из файла не работает, поэтому отредактируйте ваш index.html
, который вы должны включить до того, как ваш cordova.js
<script src="build/polyfills.js"></script>
добавит плагины в модуль вашего приложения
import {File} из '@ ionic-native / file' import {FileOpener} из '@ ionic-native / file-opener'
также добавлен в поставщики
поставщики: [..... File, FileOpener]
import { Component } from '@angular/core'
import { NavController, NavParams, Platform } from 'ionic-angular'
import { InAppBrowser } from '@ionic-native/in-app-browser'
import { File } from '@ionic-native/file'
import { FileOpener } from '@ionic-native/file-opener'
@Component({
selector: 'page-pantalla-mi-promenal-consultas',
templateUrl: 'pantalla-mi-promenal-consultas.html'
})
export class YourPage {
constructor(
public navCtrl: NavController,
public navParams: NavParams,
private platform: Platform,
private file: File,
private fileOpener: FileOpener
) {}
getUserDataSheet() {
const blob = this.b64toBlob(pdfString, 'application/pdf', 512)
let pathFile = ''
const fileName = 'myPdf.pdf'
const contentFile = blob
if (this.platform.is('ios')) {
pathFile = this.file.documentsDirectory
} else {
pathFile = this.file.externalRootDirectory
}
this.file
.writeFile(pathFile, fileName, contentFile, { replace: true })
.then(success => {
this.fileOpener
.open(pathFile + fileName, 'application/pdf')
.then(data => {
this.inAppBrowser.create(data, '_system')
})
.catch(e => console.log('Error opening file', e))
})
.catch(e => console.log('Error writing file', e))
}
}
b64toBlob(b64Data, contentType, sliceSize = 512) {
contentType = contentType || ''
sliceSize = sliceSize || 512
b64Data = b64Data.replace(/^[^,]+,/, '')
b64Data = b64Data.replace(/\s/g, '')
var byteCharacters = atob(b64Data)
var byteArrays = []
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize)
var byteNumbers = new Array(slice.length)
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i)
}
var byteArray = new Uint8Array(byteNumbers)
byteArrays.push(byteArray)
}
var blob = new Blob(byteArrays, {
type: contentType
})
// return byteCharacters;
return blob
}
}