简体   繁体   中英

How can i send a PDF as an attachment , if I only have the PDF URL

I have an ionic application, which do certain calculations based on user's inputs.After the calculations, the results are getting converted into PDF via an API(generatePDF) call.Another requirement is to email the same PDF. An API(sendMail) is made for the same. enctype='multipart/form-data' is set in the header part of the sendMail API.

I now have the PDF URL, which i get as the response of generatePDF API. Using this URL how can i attach the PDF to the mail that I am intended to send?

Could anyone please help?

Thank you @MissakBoyajian for the help.Here is what i did.

Installed File Transfer and File plugin for ionic native

this.platform.ready().then(() => {

      const fileTransfer: FileTransferObject = this.transfer.create();
      const pdfLocation = this.pdffile;//pdffile is the PDF URL which we got as the response from the generatePDF API

      fileTransfer.download(pdfLocation, this.storageDirectory + "filename.pdf").then((entry) => {
        const alertSuccess = this.alertCtrl.create({
          title: `Download Succeeded!`,
          subTitle: `PDF was successfully downloaded to: ${entry.toURL()}`,
          buttons: ['Ok']
        });

        alertSuccess.present();

        this.file.readAsDataURL(this.storageDirectory, 'filename.pdf')
        .then((datafile) =>{
          this.attachpdf(id,datafile);
        })
        .catch((err) =>{
          console.log("Error is that "+err);
        });

      }, (error) => {

        const alertFailure = this.alertCtrl.create({
          title: `Download Failed!`,
          subTitle: `PDF was not successfully downloaded. Error code: ${error.code}`,
          buttons: ['Ok']
        });
        alertFailure.present();
      });
    });

Used a function(which i got from searching) to convert base64data into blob.

    public dataURItoBlob(dataURI) {
    // convert base64/URLEncoded data component to raw binary data held in a string
    var byteString;
    if (dataURI.split(',')[0].indexOf('base64') >= 0)
        byteString = atob(dataURI.split(',')[1]);
    else
        byteString = unescape(dataURI.split(',')[1]);
    // separate out the mime component
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];

    // write the bytes of the string to a typed array
    var ia = new Uint8Array(byteString.length);
    for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }

    return new Blob([ia], {type:mimeString});
 }

Then,

    public attachpdf(emailid,filetoattach){
     let headers = new Headers();
    headers.append(...);
    headers.append('enctype','multipart/form-data');

    var blob = this.dataURItoBlob(filetoattach);

    var data ={... };

    var formData = new FormData();
    formData.append("data",JSON.stringify(data));
    formData.append("doc",blob);

    this.http.post('sendMail API',formData, {headers: headers})
    .map(res => res.json())
    .subscribe(results => { 
      ...
    },
    error=>{
      ..
    }
    )
  }

And it finally worked.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM