[RESOLU] Générateur pdf

Eléphant du PHP | 262 Messages

28 mars 2017, 14:40

Bonjour à tous,

Pourriez vous m'aider s'il vous plait?

j'ai des formulaires pour remplir une facture et j'aimerais afficher la facture en pdf avec de l'ajax;

Code : Tout sélectionner

$(document).ready(function() { // from : contentInvoice.php $('#pdf').on('click', function(e) { // asynchrone $.ajax({ url: '../Controller/generatePdf.php', type: 'post' }); }); });
puis dans mon fichier php j'ai

Code : Tout sélectionner

<?php require_once '../vendor/autoload.php'; ob_start(); include_once('../view/InvoicePdf.php'); $content = ob_get_clean(); $mpdf=new mPDF('c','A4','','' , 0 , 0 , 0 , 0 , 0 , 0); $mpdf->SetDisplayMode('fullpage'); $mpdf->list_indent_first_level = 0; // 1 or 0 - whether to indent the first level of a list $mpdf->WriteHTML($content); $mpdf->Output();
Dans ma réponse j'ai bien ma facture de généré? mais comment l'afficher dans le navigateur comme sur la plus part des sites?

merci à vous

Mammouth du PHP | 1324 Messages

28 mars 2017, 14:55

tu êux utiliser une iframe regarde aussi ce lien
https://parall.ax/products/jspdf
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Eléphant du PHP | 262 Messages

28 mars 2017, 16:32

Merci,

Mais j'ai déjà une lib pdf mpdf avec php qui est généré avec ce code:

Code : Tout sélectionner

<?php require_once '../vendor/autoload.php'; ob_start(); include_once('../view/InvoicePdf.php'); $content = ob_get_clean(); $mpdf=new mPDF('c','A4','','' , 0 , 0 , 0 , 0 , 0 , 0); $mpdf->SetDisplayMode('fullpage'); $mpdf->list_indent_first_level = 0; // 1 or 0 - whether to indent the first level of a list $mpdf->WriteHTML($content); $mpdf->Output();
Le seul problème c'est que celle-ci ne fonctionne pas avec de l'ajax mais sans oui.
Vous me conseillez de tout de même passer par une iframe est ne plus utiliser mpdf?

Merci à vous.

Mammouth du PHP | 1324 Messages

28 mars 2017, 16:45

Je ne connais pas mpdf, mais je te conseille de passer par une iframe OU de passer à la librairie jsPDF que j'ai découvert récement et qui permet une mise à jour du pdf en direct sans même avoir besoin d'ajax.

Mais en théorie, tu peux très bien envoyer tes modif en ajax, les stocker coté serveur et recharger ton iframe qui appliquera les changement.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

28 mars 2017, 16:49

salut,

tu n'as pas compris ce que te propose Spols ;)

tu gardes ton code serveur tel quel.
L'iframe va rien générer du tout c'est seulement un conteneur pour avoir une "autre page" en même temps que la tienne.

l'astuce pour charger des fichiers a partir d'une requête serveur en JS c'est d'utiliser une iframe caché qui va servir de conteneur à ta requête.
du coup plus de requête "ajax" tu post dans l'iframe.
je suppose que ton code est réduit parce qu'il n'y a pas de paramètre. si ce n'est pas le cas tu as "juste" à modifier l'url de l'iframe et le tour est joué.

un exemple ici http://stackoverflow.com/questions/1679 ... oad-a-file
ou la https://forums.asp.net/t/1986180.aspx?D ... ing+jQuery

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 874 Messages

28 mars 2017, 16:55

Le seul problème c'est que celle-ci ne fonctionne pas avec de l'ajax mais sans oui.
pourquoi ne pas faire un simple lien vers le script php qui génère le pdf ?
le script dit que c'est du pdf, alors le navigateur fera ce qu'il fait habituellement avec du pdf.

Eléphant du PHP | 262 Messages

29 mars 2017, 13:50

J'ai finalement fait cela, puisque toute mes données sont en session j'ai juste à appeler le fichier sans paramètre

Code : Tout sélectionner

$(document).ready(function() { // from : contentInvoice.php $('#pdf').on('click', function(e) { var win = window.open('../Controller/generatePdf.php', '_blank'); if (win) { //Browser has allowed it to be opened win.focus(); } else { //Browser has blocked it alert('Please allow popups for this website'); } }); });
http://stackoverflow.com/questions/4174 ... in-new-tab