Souci fichier corrompu

[Résolu/Fermé]
Signaler
Messages postés
1847
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
27 juin 2015
-
Messages postés
1847
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
27 juin 2015
-
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

1 réponse

Messages postés
1428
Date d'inscription
mercredi 29 juillet 2009
Statut
Contributeur
Dernière intervention
24 janvier 2019
89
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.
Messages postés
1847
Date d'inscription
mercredi 2 juillet 2008
Statut
Membre
Dernière intervention
27 juin 2015
516
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é !";
}