Souci fichier corrompu

Résolu
zorroestarrivé Messages postés 1849 Date d'inscription   Statut Membre Dernière intervention   -  
zorroestarrivé Messages postés 1849 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je rencontre le souci suivant:

En javascript et en local, je génère (via jsPDF) un PDF sous forme de string base 64.

Je l'envoie ensuite sur le serveur comme suit:

var doc=pdf.output('datauristring');

// Send the request
$.post('http://www.mon-site.fr/0.php', {
name: 'Moi',
email: 'monadresse@sfr.fr',
pdf: doc
}, function(d) {
console.log(d);
});


Du côté PHP (j'utilise PHP mailer), je récupère le pdf (doc) de la façon suivante pour l'envoyer en PJ à un mail:


[...]
//Send HTML or Plain Text email
$mail->isHTML(true);

$mail->Subject = "Estimation xxxxx";
$mail->Body = "<p>Bonjour<br>Veuillez trouver ci-joint votre <b>estimation</b><br>Cordialement</p>";
$mail->AltBody = "This is the plain text version of the email content";
// Pièce jointe
$mail->AddStringAttachment($_POST['pdf'],"estimation.pdf","base64","application/pdf");

// Envoi de l'email
if(!$mail->send())
{
echo "Echec de l'envoi du mail :" . $mail->ErrorInfo;
}
else
{
echo "Message envoyé !";
}


Je reçois bien le mail et sa PJ mais celle-ci n'est pas exploitable (corrompue) alors que sa taille semble correcte.

Je commence à m'arracher les cheveux !

Merci
--
Il est bien plus beau de savoir quelque chose de tout que de savoir tout d'une chose - Blaise PASCAL

1 réponse

  1. miramaze Messages postés 1429 Date d'inscription   Statut Contributeur Dernière intervention   92
     
    Hello,

    sans avoir la réponse à ton problème présentement, je déleguerais la génération du pdf au serveur en passant les données brutes à intégrer, plutôt que de le générer côté client.
    0
    1. zorroestarrivé Messages postés 1849 Date d'inscription   Statut Membre Dernière intervention   522
       
      Bonjour,

      J'y ai pensé, mais à force d'essayer, j'ai pu trouver la solution, il s'agissait essentiellement d'un problème d'encodage.

      Dans les faits, il faut retirer l'entête "data:image/jpeg;base64," de la chaine de caractères générée par jsPDF + , du côté PHP, supprimer le codage base64 du fichier généré et envoyé par mail.

      Depuis, tout marche au poil !

      Merci toutefois à toi pour cette suggestion.

      jsPDF avec PHPMailer

      js :
      var doc=(pdf.output('datauristring')).substr(28);

      // Send the request
      $.post('http://www.mon-site.fr/0.php', {
      name: 'Moi',
      email: 'monadresse@sfr.fr',
      pdf: doc
      }, function(d) {
      console.log(d);
      });

      PHP

      [...]
      //Send HTML or Plain Text email
      $mail->isHTML(true);

      $mail->Subject = "Estimation xxxxx";
      $mail->Body = "<p>Bonjour<br>Veuillez trouver ci-joint votre <b>estimation</b><br>Cordialement</p>";
      $mail->AltBody = "This is the plain text version of the email content";
      // Pièce jointe
      $mail->AddStringAttachment(base64_decode($_POST['pdf']),"estimation.pdf","base64","application/pdf");

      // Envoi de l'email
      if(!$mail->send())
      {
      echo "Echec de l'envoi du mail :" . $mail->ErrorInfo;
      }
      else
      {
      echo "Message envoyé !";
      }
      0