1

Salut à tous,
J'utilise depuis peu cette classe, je suis en train de développer une application interne pour la société de fermetures BTP ou je travail.
Une des grosses fonctionnalités me permet depuis un formulaire comportant pas mal d'options de créer un devis détaillant chacune des fournitures ( Fenêtre, porte, porte de garage ... ) avec un modèle sur mesure. Le tout est sauvegardé dans une base de donnée et les images généré sauvegardé dans un dossier sur le serveur. Une fois le devis terminé celui-ci peut être exporté en PDF grâce à html2pdf. Il faut savoir que pour le créer je récupère le devis dans une table ou chaque ID de fourniture est répertorié dans un champ sous la forme "12;13;14" j'explode cette chaîne et effectue une requete SQL pour aller récupéré chacun des produits stocké dans une autre table. Elle comporte elle aussi un champ que je dois explode qui contient les détails ( le nombre de ces détails variant je ne peux pas créer de champs dans une table pour stocké chacun de ces paramètres ). Je récupère aussi les images a afficher dans le pdf.
Alors le problème que je rencontre est que pour une seule fourniture le devis met 2-3 secondes à être créé mais dès que je créé un devis de 15 fournitures j’obtiens une page web blanche synonyme de lenteur de génération du pdf. Par contre lorsque j'affiche celui-ci sur une simple page HTML ( donc sans passer par html2pdf ) c'est instantané.

Quelqu'un aurait il rencontré ce problème ? si oui avez une alternative ou optimisation du code à me proposer.

Voici le code de génération de mon PDF :
<?php $num_devis = $_POST['num_devis']; $bdd = new PDO('mysql:host=127.0.0.1;dbname=intra_sp', 'root', ''); $bdd->exec("set names utf8"); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $select_devis = $bdd->query("SELECT * FROM devis WHERE numero='$num_devis'"); $result_devis = $select_devis->fetch(); $ID_client_devis = $result_devis['IDclient']; $select_client = $bdd->query("SELECT * FROM client WHERE ID='$ID_client_devis'"); $result_client = $select_client->fetch(); $produits = $result_devis['produits']; $ID_produits = explode(";", $produits); $nbr_produits = count($ID_produits)-1; $details_produit = array(); $details_explode_array = array(); if($result_client['telephone1']=="" && $result_client['telephone2']=="") $telephone = ""; else if($result_client['telephone1']!="" && $result_client['telephone2']=="") $telephone = $result_client['telephone1']; else $telephone = $result_client['telephone1']." / ".$result_client['telephone2']; for($i=0; $i<$nbr_produits; $i++){ $produit = $ID_produits[$i]; $select_produit = $bdd->query("SELECT * FROM produit WHERE ID='$produit'"); $result_produit = $select_produit->fetch(); $canvas_int[$i] = $result_produit['canvas_int']; $canvas_ext[$i] = $result_produit['canvas_ext']; $type_produit[$i] = $result_produit['type']; $details_produit[$i] = $result_produit['details']; $details_explode_array[$i] = explode(";", $details_produit[$i]); } ob_start(); ?> <page backbottom="7mm" > <page_footer> <table style="font-size:9px; width:100%" align="center"> <tr><td>TVA INTRA COM, FR76 344 248 992 / SIRET 344 248 992 00036 APE 4332A</td></tr> </table> </page_footer> <div style="position:absolute"><img src="image/entete_devisPDF.png" style="width:190mm;"/></div> <div style="position:relative; padding-top:5mm; padding-right:3mm; font-style:italic; font-weight:bold; font-size: 18px; color:#FFFFFF; width:100%; text-align:right">DEVIS <?php echo $num_devis;?></div> <div style="position:relative; padding-top:2mm; font-style:italic; font-size: 14px; color:#00008c; width:100%; text-align:right">le <?php echo $result_devis['date'];?></div> <table style="width:100%; padding-top:17mm"><tr><td style="width:45%; height:30mm; padding-left:15mm"></td><td style="width:55%; padding-left:15mm; padding-top:2mm"> <?php echo "<strong>".$result_client['salutation']." ".$result_client['nom']."</strong><br />".$result_client['adresse']."<br />".$result_client['complement']."<br /><strong>".$result_client['cp']." ".$result_client['ville']."</strong>"; ?></td></tr></table> <div style="position:relative; font-style:italic; font-size: 14px; color:#000000; width:100%; padding-top:1.5mm; padding-left:90mm;">Tél. <?php echo $telephone;?></div> <?php for($i=0; $i<$nbr_produits; $i++){ ?> <table style="width:100%; margin-top:3mm; font-size: 12px; color:#000000; border:#CCC solid 0.3mm;"> <tr><td style=""><table style=" border-right:#CCC solid 0.3mm"><tr><td><img style="width:300px" src="dossier/D<?php echo $num_devis; ?>/schema/<?php echo $canvas_int[$i]; ?>" /></td></tr><tr><td style="text-align:right; font-size: 6px; padding-right: 3mm; color: #BBB">schema non contractuel</td></tr></table></td> <td style="width:104mm"><?php if($type_produit[$i]=="cha"){ $croisillon = ""; $rengresse = ""; $imposteDetails =""; $imposteOscillo =""; $motifImposte =""; if($details_explode_array[$i][7]!="sans") $croisillon = "<br />- Petit bois ".$details_explode_array[$i][7]." ".$details_explode_array[$i][8]."x".$details_explode_array[$i][9]." carreaux"; if($details_explode_array[$i][13]!="sans") $rengresse = "<br/ >- Rengresse ".$details_explode_array[$i][13]." de ".$details_explode_array[$i][14]."mm"; $imposte = explode("/", $details_explode_array[$i][15]); if($imposte[0]!=""){ if($imposte[1]=="avec") $imposteOscillo = "oscillobattante"; if($imposte[2]!="") $motifImposte = " vitrage ".$imposte[2]; $imposteDetails = "<br/ >- Imposte ".$imposte[0]." ".$imposteOscillo." de ".$imposte[3]."mm ".$motifImposte; } echo "<table><tr><td style=\"height:48mm\">"; echo "- Châssis ".$details_explode_array[$i][1]." pose ".$details_explode_array[$i][2]; echo "<br />-<strong> Largeur = ".$details_explode_array[$i][4]."mm Hauteur = ".$details_explode_array[$i][5]. "mm</strong>"; echo "<br/ >- Coloris intérieur RAL ".$details_explode_array[$i][10]; echo "<br/ >- Coloris extérieur RAL ".$details_explode_array[$i][11]; echo "<br/ >- Vitrage ".$details_explode_array[$i][6]; echo $croisillon; echo "<br/ >-<strong> ".$details_explode_array[$i][12]." ouvrants à la française</strong>"; $ouvrants = explode("/", $details_explode_array[$i][18]); for($j=0; $j<$details_explode_array[$i][12]; $j++){ $details_ouvrants = explode("*", $ouvrants[$j] ); echo "<br/><span style=\"padding-left:3mm;\">Ouvrant ".($j+1)."</span>"; } echo $imposteDetails; echo $rengresse; echo "</td></tr><tr style=\"background-color: #BBB; color:#FFF;\"><td style=\"width:104mm; height:5mm; text-align:right; padding-right: 3mm; font-size: 12px;\">"; echo "HT : ".$details_explode_array[$i][20]." € / TVA ".$details_explode_array[$i][21]." % : ".$details_explode_array[$i][20]/100*$details_explode_array[$i][21]." € / Quantité : ".$details_explode_array[$i][22]." pièce(s) / <strong>TTC ".($details_explode_array[$i][20]+$details_explode_array[$i][20]/100*$details_explode_array[$i][21]." €</strong>"); echo "</td></tr></table>"; } ?></td></tr> </table> <?php } ?> </page> <?php $content = ob_get_clean(); /*$chemin_PDF = "dossier/D".$num_devis."/devis_".$num_devis.".pdf"; require('html2pdf/html2pdf.class.php'); $pdf=new HTML2PDF('P', 'A4', 'fr', true, 'UTF-8', array(10, 15, 10, 15)); $pdf->writeHTML($content); $pdf->Output($chemin_PDF, 'F');*/ echo $content; ?>