2017-02-01 6 views
0

Ich versuche gerade, ein PDF, das mit PDFMake erstellt wurde, in eine Datei zu schreiben, und nehme dann diese Datei und hefte sie an eine E-Mail an. Ich habe 6 Stunden damit verbracht, dies zu tun, und ich bekomme immer wieder Fehler.Ionic 2 Dateispeicher

Unten ist mein Code zum Exportieren der PDF. Ich habe das PDF in Serve mit createPDF.open() getestet und es hat funktioniert. Ich habe auch die Base64-Daten in der Konsole gedruckt.

exportPDF() { 
    console.log("ExportPDF()") 
    this.pdf = pdfMake; 
    // For use in browser(web) 
    //this.pdf.createPdf(getDocDefinition(this.issues, this.project, this.report)).open(); 
    let data : string; 
    let newPDF; 


    this.pdf.createPdf(getDocDefinition(this.issues, this.project, this.report)).getBase64((buffer) => { 
     data = buffer; 
     console.log("newPDF: " + data) 
    }); 

    // this.pdf.createPdf(getDocDefinition(this.issues, this.project, this.report)).getBuffer((buffer) => { 
    // data = buffer.toArrayBuffer(); 
    // console.log("newPDF: " + data) 
    // }); 


    // Platforms 
    if (this.plat.is('ios')) { 
     console.log("Platform: ios") 

     let file = "testFingering.pdf" 

     console.log(cordova.file.cacheDirectory); 

     File.removeFile(cordova.file.cacheDirectory, file); 
     File.writeFile(cordova.file.cacheDirectory, file, data).then(() => { 
     // Success! 
     console.log("writeFile: success!") 

     SocialSharing.share("tits", "tits", cordova.file.cacheDirectory + file).then(() => { 
      // Success! 
      console.log("shareViaEmail: success!") 
     }).catch((err) => { 
      // Error! 
      console.log("shareViaEmail: fail! " + err) 
     }); 

     }).catch((err) => { 
     // Error! 
     console.log("writeFile: fail! " + JSON.stringify(err)); 
     }); 

    } else if (this.plat.is('android')) { 
     console.log("Platform: android") 

    } else if (this.plat.is('windows')) { 
     console.log("Platform: windows") 

    } else { 
     console.log("Platform: web") 

    } 

    } 

Hier sind die Fehler Ich erhalte:

2017-01-31 20:40:12.997343 CMTA[1725:417453] writeFile: fail! {"code":12,"message":"PATH_EXISTS_ERR"} 
2017-01-31 20:40:13.013456 CMTA[1725:417453] writeFile: fail! {"code":"Invalid parameter type"} 

ich nur Ausführen dieses Code einmal, so 1) Ich bin nicht sicher, warum es zwei Fehler protokolliert.

2) Ich weiß "PATH_EXISTS_ERR" bedeutet, dass der Pfad bereits existiert, aber wenn Sie in den Code schauen, lösche ich die Datei und erstelle sie jedes Mal neu.

3) Welchen Parameter sollte ich eingeben? Es sagt, es wird "Text" akzeptieren, sollte ich etwas anderes verwenden? Ich habe vorher versucht, auf BufferArray() zu antworten, denn das habe ich in meiner Ionic 1-Version dieser App gemacht, aber das funktioniert nicht mehr.

Ich würde jede Hilfe sehr schätzen, da dies mich zu keinem Ende frustriert.

Antwort

0

Nun, ich landete alles bekommen. Ich musste allerdings zwei Schritte machen.

1) Ich musste die Datei.writeFile() in die Antwort von meinem Aufruf createPDF() verschieben.

2) Ich musste getBuffer() anstelle von getBase64() und dann eine Funktion im Internet für toBufferArray() finden. Hier

ist der endgültige Code:

exportPDF() { 
    console.log("ExportPDF()") 
    this.pdf = pdfMake; 
    // For use in browser(web) 
    //this.pdf.createPdf(getDocDefinition(this.issues, this.project, this.report)).open(); 
    let data; 
    let file = "test11.pdf"; 
    let newPDF; 


    this.pdf.createPdf(getDocDefinition(this.issues, this.project, this.report)).getBuffer((buffer) => { 
     data = this.toArrayBuffer(buffer); 
     console.log("newPDF: " + data); 
     console.log(cordova.file.cacheDirectory + file); 
     File.removeFile(cordova.file.cacheDirectory, file); 
     File.writeFile(cordova.file.cacheDirectory, file, data, true).then(() => { 
     // Success! 
     console.log("writeFile: success!"); 

     SocialSharing.share("tits", "tits", cordova.file.cacheDirectory + file).then(() => { 
      // Success! 
      console.log("shareViaEmail: success!") 
     }).catch((err) => { 
      // Error! 
      console.log("shareViaEmail: fail! " + err) 
     }); 

     }).catch((err) => { 
     // Error! 
     console.log("writeFile: fail! " + JSON.stringify(err)); 
     }); 
    }); 

    // this.pdf.createPdf(getDocDefinition(this.issues, this.project, this.report)).getBuffer((buffer) => { 
    // data = buffer.toArrayBuffer(); 
    // console.log("newPDF: " + data) 
    // }); 

    } 

    toArrayBuffer(buf) { 
    let ab = new ArrayBuffer(buf.length); 
    let view = new Uint8Array(ab); 
    for (let i = 0; i < buf.length; ++i) { 
     view[i] = buf[i]; 
    } 
    return ab; 
    }