#pdf-generation #ionic4 #ionic-native #pdfmake #capacitor
#pdf-генерация #ionic4 #ionic-native #pdfmake #конденсатор
Вопрос:
Я использую Ionic 4, Capacitor и pdfMake для генерации PDF и открытия на эмуляторе Android. Поскольку запись в файл Capacitor не поддерживает blob, я отправляю его как base64.
Примечание: Я пытался использовать плагин Cordova для сохранения в виде большого двоичного объекта, но он не работает должным образом с capacitor. Также у меня есть решение, которое отлично работает только в проекте Cordova, но мне нужно использовать Capacitor.
Однако, когда я открываю pdf на устройстве, он сообщает, что он в недопустимом формате.
Есть идеи, что я здесь делаю не так?
if (this.plt.is('cordova')) {
this.pdfObj.getBase64((data) => {
this.pdfBase64 = data;
console.log(this.pdfBase64);
});
downloadPdf() {
const { Filesystem } = Plugins;
if (this.plt.is('cordova')) {
console.log('3');
// Save the PDF to the data Directory of our App
const fileName = 'defectreport.pdf';
try {
Filesystem.writeFile({
path: fileName,
data: this.pdfBase64,
directory: FilesystemDirectory.Data,
encoding: FilesystemEncoding.ASCII
}).then((writeFileResult) => {
console.log('File Written');
Filesystem.getUri({
directory: FilesystemDirectory.Data,
path: fileName
}).then((getUriResult) => {
console.log(getUriResult);
const path = getUriResult.uri;
this.fileOpener.open(path, 'application/pdf')
.then(() => console.log('File is opened'))
.catch(error => console.log('Error openening file', error));
}, (error) => {
console.log(error);
});
});
console.log('writeFile complete');
} catch (error) {
console.error('Unable to write file', error);
}
Ответ №1:
Документация для файловой системы Capacitor вводит в заблуждение. Если вы передаете параметр encoding в Filesystem.WriteFile, предполагается, что это обычный текстовый файл. Если вы не укажете его, он принимает base64. Приведенный ниже код работает.
Filesystem.writeFile({
path: fileName,
data: this.pdfBase64,
directory: FilesystemDirectory.Documents