Сгенерированный PDF неверный формат файла при открытии на Android - PullRequest
0 голосов
/ 09 марта 2019

Я использую Ionic 4, Capacitor и pdfMake для генерации PDF и открытия на эмуляторе Android. Поскольку запись в файл конденсатора не поддерживает blob, я отправляю его как base64.

Примечание: Я пытался использовать плагин Cordova для сохранения в виде большого двоичного объекта, но он не работает должным образом с конденсатором. Также у меня есть решение, работающее нормально в проекте только Cordova, но мне нужно использовать конденсатор.

Однако, когда я открываю 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 Ответ

0 голосов
/ 10 марта 2019

Документация для файловой системы конденсатора вводит в заблуждение. Если вы передаете параметр кодирования в Filesystem.writeFile, он предполагает, что это простой текстовый файл. Если вы не предоставите его, это предполагает base64. Код ниже работает.

 Filesystem.writeFile({
        path: fileName,
        data: this.pdfBase64,
        directory: FilesystemDirectory.Documents
...