Souci fichier corrompu

Résolu/Fermé
zorroestarrivé Messages postés 1847 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 27 juin 2015 - 22 juin 2015 à 23:03
zorroestarrivé Messages postés 1847 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 27 juin 2015 - 27 juin 2015 à 12:02
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
A voir également:

1 réponse

miramaze Messages postés 1429 Date d'inscription mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
26 juin 2015 à 22:35
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
zorroestarrivé Messages postés 1847 Date d'inscription mercredi 2 juillet 2008 Statut Membre Dernière intervention 27 juin 2015 518
Modifié par zorroestarrivé le 27/06/2015 à 12:03
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