Page 1 sur 1

Problème fichier PDF corrompu (mail)

Posté : 22 juin 2015, 23:28
par LovelyRiver
Bonjour,

Nouveau sur le forum :D et pas très aguerri au PHP (mon domaine c'est plutôt l'HTML et jQuery), Je rencontre le souci suivant:

En javascript et en local, je génère (via jsPDF) un PDF sous forme de string base 64 (Il est parfaitement correct, j'arrive à l'ouvrir dans un navigateur).

Je l'envoie ensuite sur le serveur comme suit:

Code : Tout sélectionner

var doc=pdf.output('datauristring'); // Send the request $.post('http://www.mon-site.fr/0.php', { name: 'Moi', email: '[email protected]', 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:

Code : Tout sélectionner

[...] //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 parfaitement le mail et sa PJ mais celle-ci n'est pas exploitable (corrompue) alors que sa taille semble correcte.

J'ai essayé des variantes mais là Je commence à m'arracher les cheveux !

Merci

Re: Problème fichier PDF corrompu (mail)

Posté : 22 juin 2015, 23:42
par tof73
il semble que cela fonctionne sans les 2 derniers paramètres.

Re: Problème fichier PDF corrompu (mail)

Posté : 22 juin 2015, 23:48
par LovelyRiver
Merci de ta réponse.

Tu veux dire seulement avec :

Code : Tout sélectionner

$mail->AddStringAttachment($_POST['pdf'],"estimation.pdf");
?

Si oui, je viens de réessayer ceci et cela ne fonctionne pas.

Problème fichier PDF corrompu (mail) jsPDF & PHP Mailer

Posté : 27 juin 2015, 12:11
par LovelyRiver
Bonjour,

J'ai, à force de tenir à mes cheveux, pu trouver la solution :D :D
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 parfaitement, un soulagement !

Pour tous ceux qui seraient confrontés au même problème:

jsPDF avec PHPMailer


js :

Code : Tout sélectionner

var doc=(pdf.output('datauristring')).substr(28); // Send the request $.post('http://www.mon-site.fr/0.php', { name: 'Moi', email: '[email protected]', pdf: doc }, function(d) { console.log(d); });
PHP

Code : Tout sélectionner

[...] //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é !"; }