} else { $eff=0; } my_echo_debug($eff); if($js_eff!="") {$js_eff.=",";} $js_eff.="'".$eff."'"; my_echo_debug("</td>\n"); $timestamp+=3600*24; $compteur_jour++; } my_echo_debug("</tr>\n"); my_echo_debug("</table>\n"); $largeur_barre=10; $largeur_totale=ceil(1.5*$largeur_barre*$compteur_jour)+20*2; $unite_y=20; $hauteur_totale=max(100,$unite_y*$max_eff)+3*$unite_y; $hauteur_totale_min=$hauteur_totale-40; $nb_grad_y=floor($hauteur_totale_min/$unite_y); echo "<canvas id='diagramme' width='$largeur_totale' height='$hauteur_totale'></canvas>\n"; echo "<script type='text/javascript'> var texte_mois=new Array();
function myWriteHTML($html) { global $my_echo_debug, $mode_my_echo_debug; //================================ // Options de debug // Passer à 1 pour débugger $my_echo_debug = 0; //$my_echo_debug=1; // Les modes sont 'fichier' ou n'importe quoi d'autre qui provoque des echo... donc un échec de la génération de PDF... à ouvrir avec un bloc-notes, pas avec un lecteur PDF // Voir la fonction my_echo_debug() pour l'emplacement du fichier généré $mode_my_echo_debug = 'fichier'; //$mode_my_echo_debug=''; //================================ if ($my_echo_debug == 1) { my_echo_debug("\n =====================================\n"); } if ($my_echo_debug == 1) { my_echo_debug(" myWriteHTML: Lancement sur \"{$html}\" \n"); } //Parseur HTML $html = str_replace("\n", ' ', $html); $html = str_replace("\r", '', $html); $a = preg_split('/<(.*)>/U', $html, -1, PREG_SPLIT_DELIM_CAPTURE); foreach ($a as $i => $e) { if ($i % 2 == 0) { // Il se passe un truc bizarre avec un saut de 10cm quasiment sur l'abscisse de retour après écriture d'une cellule vide. if ($e != "") { if ($my_echo_debug == 1) { my_echo_debug(" myWriteHTML: Avant écriture de \"{$e}\"\n myWriteHTML: x=" . $this->GetX() . " et y=" . $this->GetY() . "\n"); } if ($my_echo_debug == 1) { my_echo_debug(" myWriteHTML: Largeur de \"{$e}\": " . $this->GetStringWidth($e) . "\n"); } $this->Cell($this->GetStringWidth($e), 5, $e, 0, 0, ''); if ($my_echo_debug == 1) { my_echo_debug(" myWriteHTML: Après écriture de \"{$e}\"\n myWriteHTML: x=" . $this->GetX() . " et y=" . $this->GetY() . "\n"); } } } else { //Balise if ($e[0] == '/') { $tag = strtoupper(substr($e, 1)); if ($tag == 'B' or $tag == 'I' or $tag == 'U') { if ($my_echo_debug == 1) { my_echo_debug(" myWriteHTML: Avant fermeture de \"{$tag}\"\n myWriteHTML: x=" . $this->GetX() . " et y=" . $this->GetY() . "\n"); } $this->MyCloseTag($tag); if ($my_echo_debug == 1) { my_echo_debug(" myWriteHTML: Après fermeture de \"{$tag}\"\n myWriteHTML: x=" . $this->GetX() . " et y=" . $this->GetY() . "\n"); } } } else { //Extraction des attributs $a2 = explode(' ', $e); $tag = strtoupper(array_shift($a2)); $attr = array(); if (function_exists("mb_ereg")) { foreach ($a2 as $v) { if (mb_ereg('^([^=]*)=["\']?([^"\']*)["\']?$', $v, $a3)) { $attr[strtoupper($a3[1])] = $a3[2]; } } } else { foreach ($a2 as $v) { if (my_ereg('^([^=]*)=["\']?([^"\']*)["\']?$', $v, $a3)) { $attr[strtoupper($a3[1])] = $a3[2]; } } } if ($tag == 'B' or $tag == 'I' or $tag == 'U') { if ($my_echo_debug == 1) { my_echo_debug(" myWriteHTML: Avant ouverture de \"{$tag}\"\n myWriteHTML: x=" . $this->GetX() . " et y=" . $this->GetY() . "\n"); } $this->MyOpenTag($tag, $attr); if ($my_echo_debug == 1) { my_echo_debug(" myWriteHTML: Après ouverture de \"{$tag}\"\n myWriteHTML: x=" . $this->GetX() . " et y=" . $this->GetY() . "\n"); } } } } } }
/** * Ajuste la taille de la police * * @global class * @global int * @global string * @param type $texte * @param type $x * @param type $y * @param type $largeur_dispo * @param type $h_cell * @param type $hauteur_max_font * @param type $hauteur_min_font * @param type $bordure LRBT * @param type $v_align C(enter) ou T(op) * @param type $align * @param type $increment nombre dont on réduit la police à chaque essai * @param type $r_interligne proportion de la taille de police pour les interlignes * @see PDF */ function cell_ajustee1($texte,$x,$y,$largeur_dispo,$h_cell,$hauteur_max_font,$hauteur_min_font,$bordure,$v_align='C',$align='L',$increment=0.3,$r_interligne=0.3) { // Pour que la variable puisse être récupérée dans la fonction my_echo_debug(), il faut la déclarer comme globale: global $pdf, $my_echo_debug, $mode_my_echo_debug; $texte=trim($texte); $hauteur_texte=$hauteur_max_font; //================================ // Options de debug // Passer à 1 pour débugger $my_echo_debug=0; //$my_echo_debug=1; // Les modes sont 'fichier' ou n'importe quoi d'autre qui provoque des echo... donc un échec de la génération de PDF... à ouvrir avec un bloc-notes, pas avec un lecteur PDF // Voir la fonction my_echo_debug() pour l'emplacement du fichier généré $mode_my_echo_debug='fichier'; //$mode_my_echo_debug=''; //================================ if($my_echo_debug==1) my_echo_debug("\n\n=========================================================\n"); if($my_echo_debug==1) my_echo_debug("Lancement de\nmy_cell_ajustee(\$texte=$texte,\n\$x=$x,\n\$y=$y,\n\$largeur_dispo=$largeur_dispo,\n\$h_cell=$h_cell,\n\$hauteur_max_font=$hauteur_max_font,\n\$hauteur_min_font=$hauteur_min_font,\n\$bordure=$bordure,\n\$v_align=$v_align,\n\$align=$align,\n\$increment=$increment,\n\$r_interligne=$r_interligne)\n\n"); if($my_echo_debug==1) my_echo_debug("\$texte=\"$texte\"\n"); // Pour réduire la taille du texte, il se peut qu'il faille supprimer les balises,... $supprimer_balises="n"; $supprimer_retours_a_la_ligne="n"; $tronquer="n"; // On commence par essayer de remplir la cellule avec la taille de police proposée // Et réduire la taille de police si cela ne tient pas. // Si on arrive à une taille de police trop faible, on va supprimer des retours à la ligne, des balises ou même tronquer. // Pour forcer en debug: //$tronquer='y'; while($tronquer!='y') { // On (re)démarre un essai avec une taille de police $pdf->SetFontSize($hauteur_texte); // Nombre max de lignes avec la hauteur courante de police // Il manque l'interligne de bas de cellule $nb_max_lig=max(1,floor(($h_cell-$r_interligne*($hauteur_texte*26/100))/((1+$r_interligne)*($hauteur_texte*26/100)))); if($my_echo_debug==1) my_echo_debug("\nOn lance un tour avec la taille de police:\n\$hauteur_texte=$hauteur_texte\n"); if($my_echo_debug==1) my_echo_debug("\$nb_max_lig=$nb_max_lig\n"); // Lignes dans la cellule unset($ligne); $ligne=array(); // Compteur des lignes $cpt=0; // On prévoit deux... trois espaces de marge en gras pour s'assurer que la ligne ne débordera pas $pdf->SetFont('DejaVu','B'); $un_espace_gras=$pdf->GetStringWidth(' '); if($my_echo_debug==1) my_echo_debug("Un espace en gras mesure $un_espace_gras\n"); $marge_espaces=3*$un_espace_gras; if($my_echo_debug==1) my_echo_debug("On compte trois espaces de marge, soit $marge_espaces\n"); $largeur_utile=$largeur_dispo-$marge_espaces; if($my_echo_debug==1) my_echo_debug("D'où \$largeur_utile=$largeur_utile\n"); // CONTROLER QUE \$largeur_utile>0 if($largeur_utile<=0) { // On se laisse une chance que cela tienne en tronquant $tronquer="y"; break; } $style_courant=''; $pdf->SetFont('DejaVu',$style_courant); // (Ré-)initialisation du témoin $temoin_reduire_police="n"; if($supprimer_retours_a_la_ligne=="y") { $texte=trim(preg_replace("/\n/"," ",$texte)); } $chaine_longueur_ligne_courante="0"; // Suppression de mises en forme de textes vides: $texte=preg_replace("|<b></b>|i","",$texte); $texte=preg_replace("|<u></u>|i","",$texte); $texte=preg_replace("|<i></i>|i","",$texte); $tab=preg_split('/<(.*)>/U',$texte,-1,PREG_SPLIT_DELIM_CAPTURE); foreach($tab as $i=>$valeur) { // Avec $i pair on a le texte et les indices impairs correspondent aux balises (b et /b,...) // On initialise la ligne courante si nécessaire pour le cas où on aurait $texte="<b>Blabla..." // Il faut que la ligne soit initialisée pour pouvoir ajouter le <b> dans $i%2!=0 if(!isset($ligne[$cpt])) { $ligne[$cpt]=''; $longueur_ligne_courante=0; $chaine_longueur_ligne_courante="0"; } if($i%2==0) { if($my_echo_debug==1) my_echo_debug("\nParcours avec l'élément \$i=$i: \"$tab[$i]\"\n"); $tab2=explode(" ",$tab[$i]); // Si on gère aussi les virgules et tirets, il y a une difficulté supplémentaire à gérer pour re-concaténer (normalement après une virgule, on doit avoir un espace)... donc on ne gère que les espaces if($my_echo_debug==1) my_echo_debug("_____________________________________________\n"); for($j=0;$j<count($tab2);$j++) { if($my_echo_debug==1) my_echo_debug("Mot \$tab2[$j]=\"$tab2[$j]\"\n"); } if($my_echo_debug==1) my_echo_debug("_____________________________________________\n"); for($j=0;$j<count($tab2);$j++) { if($my_echo_debug==1) my_echo_debug("Mot \$tab2[$j]=\"$tab2[$j]\"\n"); // Si un des mots dépasse $largeur_dispo, il faut réduire la police (et si avec la police minimale, ça dépasse $largeur_dispo, il faudra couper n'importe où...) if($pdf->GetStringWidth($tab2[$j])>$largeur_utile) { $temoin_reduire_police="y"; break; } if($j>0) { // Il ne faut ajouter un espace que si on a augmenté $j... (on n'est plus au premier mot de la ligne ~ voire... pb avec les découpes suivant les balises HTML) $largeur_espace=$pdf->GetStringWidth(' '); $longueur_ligne_courante+=$largeur_espace; $chaine_longueur_ligne_courante.="+".$largeur_espace; if($my_echo_debug==1) my_echo_debug("\$longueur_ligne_courante=$longueur_ligne_courante et \$largeur_utile=$largeur_utile\n"); if($my_echo_debug==1) my_echo_debug("\$chaine_longueur_ligne_courante=$chaine_longueur_ligne_courante\n"); if($longueur_ligne_courante>$largeur_utile) { // En ajoutant un espace, on dépasse la largeur_dispo $cpt++; if($cpt+1>$nb_max_lig) { // On dépasse le nombre max de lignes avec la taille de police courante $temoin_reduire_police="y"; // On quitte la boucle sur les \n (boucle sur $tab3) break; } $ligne[$cpt]=''; $longueur_ligne_courante=0; $chaine_longueur_ligne_courante="0"; } else { $ligne[$cpt].=' '; if($my_echo_debug==1) my_echo_debug("On a ajouté un espace dans la longueur qui précède.\n"); if($my_echo_debug==1) my_echo_debug("Longueur calculée sans gérer les balises ".$pdf->GetStringWidth($ligne[$cpt])."\n"); } } // Il n'y a pas d'espace dans $tab2[$j] // Si on scinde avec des \n, on aura un mot par indice de $tab3 unset($tab3); $tab3=array(); if($my_echo_debug==1) my_echo_debug("\$supprimer_retours_a_la_ligne=$supprimer_retours_a_la_ligne\n"); // Prendre en compte à ce niveau les \n if($supprimer_retours_a_la_ligne=="n") { if($my_echo_debug==1) my_echo_debug("On découpe si nécessaire les retours à la ligne\n"); $tab3=explode("\n",$tab2[$j]); for($loop=0;$loop<count($tab3);$loop++) {if($my_echo_debug==1) my_echo_debug(" \$tab3[$loop]=\"$tab3[$loop]\"\n");} } else { $tab3[0]=$tab2[$j]; } // Si supprimer_retours_a_la_ligne=='y', on ne fait qu'un tour dans la boucle for($k=0;$k<count($tab3);$k++) { if($k>0) { // On change de ligne if($my_echo_debug==1) my_echo_debug("\$ligne[$cpt]=\"$ligne[$cpt]\"\n"); if($my_echo_debug==1) my_echo_debug("\$longueur_ligne_courante=$longueur_ligne_courante\n"); if($my_echo_debug==1) my_echo_debug("\$chaine_longueur_ligne_courante=$chaine_longueur_ligne_courante\n"); $cpt++; if($cpt+1>$nb_max_lig) { // On dépasse le nombre max de lignes avec la taille de police courante $temoin_reduire_police="y"; // On quitte la boucle sur les \n (boucle sur $tab3) break; } $ligne[$cpt]=''; $longueur_ligne_courante=0; $chaine_longueur_ligne_courante="0"; } $test_longueur_ligne_courante=$longueur_ligne_courante+$pdf->GetStringWidth($tab3[$k]); if($my_echo_debug==1) my_echo_debug("La longueur du mot \$tab3[$k]=\"$tab3[$k]\" est ".$pdf->GetStringWidth($tab3[$k])."\n"); if($test_longueur_ligne_courante>$largeur_utile) { $cpt++; if($cpt+1>$nb_max_lig) { // On dépasse le nombre max de lignes avec la taille de police courante $temoin_reduire_police="y"; // On quitte la boucle sur les \n (boucle sur $tab3) break; } $ligne[$cpt]=$tab3[$k]; $longueur_mot=$pdf->GetStringWidth($tab3[$k]); $longueur_ligne_courante=$longueur_mot; $chaine_longueur_ligne_courante=$longueur_mot; } else { // Ca tient encore sur la ligne courante $ligne[$cpt].=$tab3[$k]; $longueur_mot=$pdf->GetStringWidth($tab3[$k]); $longueur_ligne_courante+=$longueur_mot; $chaine_longueur_ligne_courante.="+".$longueur_mot; } if($my_echo_debug==1) my_echo_debug("\$ligne[$cpt]=\"$ligne[$cpt]\"\n"); if($my_echo_debug==1) my_echo_debug("\$longueur_ligne_courante=$longueur_ligne_courante\n"); if($my_echo_debug==1) my_echo_debug("\$chaine_longueur_ligne_courante=$chaine_longueur_ligne_courante\n"); } if($temoin_reduire_police=="y") { // On quitte la boucle sur les mots (boucle sur $tab2) break; } } } elseif($supprimer_balises=="n") { // On tient compte des balises if($valeur{0}=='/') { // On referme une balise if(mb_strtoupper($valeur)=='/B') { $style_courant=preg_replace("/B/i","",$style_courant); $pdf->SetFont('DejaVu',$style_courant); $ligne[$cpt].="</B>"; } elseif(mb_strtoupper($valeur)=='/I') { $style_courant=preg_replace("/I/i","",$style_courant); $pdf->SetFont('DejaVu',$style_courant); $ligne[$cpt].="</I>"; } elseif(mb_strtoupper($valeur)=='/U') { $style_courant=preg_replace("/U/i","",$style_courant); $pdf->SetFont('DejaVu',$style_courant); $ligne[$cpt].="</U>"; } } else { // On ouvre une balise if(mb_strtoupper($valeur)=='B') { $style_courant=$style_courant.'B'; $pdf->SetFont('DejaVu',$style_courant); $ligne[$cpt].="<B>"; } elseif(mb_strtoupper($valeur)=='I') { $style_courant=$style_courant.'I'; $pdf->SetFont('DejaVu',$style_courant); $ligne[$cpt].="<I>"; } elseif(mb_strtoupper($valeur)=='U') { $style_courant=$style_courant.'U'; $pdf->SetFont('DejaVu',$style_courant); $ligne[$cpt].="<U>"; } } if($my_echo_debug==1) my_echo_debug("\$ligne[$cpt]=\"$ligne[$cpt]\"\n"); if($my_echo_debug==1) my_echo_debug("\$longueur_ligne_courante=$longueur_ligne_courante\n"); if($my_echo_debug==1) my_echo_debug("\$style_courant=$style_courant\n"); } if($temoin_reduire_police=="y") { $hauteur_texte-=$increment; //if($hauteur_texte<=0) { if(($hauteur_texte<=0)||($hauteur_texte<$hauteur_min_font)) { // Problème... il va falloir: // - ne pas prendre en compte les \n // - ne pas prendre en compte les balises // - tronquer if($supprimer_retours_a_la_ligne=='n') { // On va virer les \n en les remplaçant par des espaces $supprimer_retours_a_la_ligne='y'; if($my_echo_debug==1) my_echo_debug("+++ On va supprimer les retours à la ligne.\n"); } elseif($supprimer_balises=='n') { // On va un cran plus loin... en virant les balises... on ne gagnera que sur les mots en gras qui sont plus larges $supprimer_balises='y'; if($my_echo_debug==1) my_echo_debug("+++ On va supprimer les balises.\n"); } else { // Il va falloir tronquer... pas cool! // A FAIRE $tronquer="y"; if($my_echo_debug==1) my_echo_debug("+++ On va tronquer.\n"); } // Réinitialiser la taille de police: $hauteur_texte=$hauteur_max_font; } else { if($my_echo_debug==1) my_echo_debug("+++++++++++++++\n"); if($my_echo_debug==1) my_echo_debug("\nOn réduit la taille de police:\n"); if($my_echo_debug==1) my_echo_debug("\$hauteur_texte=".$hauteur_texte."\n"); } // On quitte la boucle sur le tableau des découpages de balises HTML (boucle sur $tab) break; } } if($my_echo_debug==1) my_echo_debug("\$temoin_reduire_police=$temoin_reduire_police\n"); if($temoin_reduire_police!="y") { // On a fini par trouver une taille de police convenable if($my_echo_debug==1) my_echo_debug("\nOn a trouvé la bonne la taille de police:\n"); // On quitte la boucle pour procéder à l'affichage du contenu de $ligne plus bas break; } } if($tronquer=='y') { // A FAIRE: On va remplir en coupant n'importe où dans les mots sans chercher à conserver des mots entiers // Faut-il faire la boucle sur la taille de police? // Ou prendre directement la taille minimale? if($my_echo_debug==1) my_echo_debug("---------------------------------\n"); if($my_echo_debug==1) my_echo_debug("--- On va remplir en tronquant...\n"); $hauteur_texte=$hauteur_min_font; $pdf->SetFontSize($hauteur_texte); // Nombre max de lignes avec la hauteur courante de police $nb_max_lig=max(1,floor(($h_cell-$r_interligne*($hauteur_texte*26/100))/((1+$r_interligne)*($hauteur_texte*26/100)))); if($my_echo_debug==1) my_echo_debug("\$hauteur_texte=$hauteur_texte\n"); if($my_echo_debug==1) my_echo_debug("\$nb_max_lig=$nb_max_lig\n"); // Lignes dans la cellule unset($ligne); $ligne=array(); // Compteur des lignes $cpt=0; $longueur_max_atteinte="n"; // On prévoit deux... trois espaces de marge en gras pour s'assurer que la ligne ne débordera pas $pdf->SetFont('DejaVu','B'); $marge_espaces=3*$pdf->GetStringWidth(' '); $largeur_utile=$largeur_dispo-$marge_espaces; // CONTROLER QUE \$largeur_utile>0 if($largeur_utile>0) { $style_courant=''; $pdf->SetFont('DejaVu',$style_courant); // On va supprimer les retours à la ligne $texte=trim(preg_replace("/\n/"," ",$texte)); if($my_echo_debug==1) my_echo_debug("\$texte=$texte\n"); // On supprime les balises $texte=preg_replace('/<(.*)>/U','',$texte); if($my_echo_debug==1) my_echo_debug("\$texte=$texte\n"); for($j=0;$j<mb_strlen($texte);$j++) { if(!isset($ligne[$cpt])) { $ligne[$cpt]=''; } if($my_echo_debug==1) my_echo_debug("\$ligne[$cpt]=\"$ligne[$cpt]\"\n"); $chaine=$ligne[$cpt].mb_substr($texte,$j,1); if($my_echo_debug==1) my_echo_debug("\$chaine=\"$chaine\"\n"); if($pdf->GetStringWidth($chaine)>$largeur_utile) { if($my_echo_debug==1) my_echo_debug("Avec \$chaine, ça dépasse.\n"); if($cpt+1>$nb_max_lig) { $longueur_max_atteinte="y"; if($my_echo_debug==1) my_echo_debug("\$cpt=$cpt et \$nb_max_lig=$nb_max_lig.\nOn ne peut plus ajouter une ligne.\n"); break; } $cpt++; $ligne[$cpt]=mb_substr($texte,$j,1); if($my_echo_debug==1) my_echo_debug("On commence une nouvelle ligne avec le dernier caractère: \"".mb_substr($texte,$j-1,1)."\"\n"); if($my_echo_debug==1) my_echo_debug("\$ligne[$cpt]=\"$ligne[$cpt]\"\n"); } else { $ligne[$cpt].=mb_substr($texte,$j,1); if($my_echo_debug==1) my_echo_debug("\$ligne[$cpt]=\"$ligne[$cpt]\"\n"); } } if($my_echo_debug==1) my_echo_debug("On a fini le texte... ou atteint une limite\n"); } } // On va afficher le texte // Hauteur de la police en mm $hauteur_texte_mm=$hauteur_texte*26/100; // Hauteur de la police en pt $taille_police=$hauteur_texte; // Hauteur totale du texte $hauteur_totale=($cpt+1)*$hauteur_texte_mm*(1+$r_interligne); // Marge verticale en mm entre les lignes $marge_verticale=$hauteur_texte_mm*$r_interligne; if($my_echo_debug==1) my_echo_debug("\$hauteur_texte=".$hauteur_texte."\n"); if($my_echo_debug==1) my_echo_debug("\$hauteur_texte_mm=".$hauteur_texte_mm."\n"); if($my_echo_debug==1) my_echo_debug("\$hauteur_totale=".$hauteur_totale."\n"); if($my_echo_debug==1) my_echo_debug("\$marge_verticale=".$marge_verticale."\n"); // On trace le rectangle (vide) du cadre: $pdf->SetXY($x,$y); $pdf->Cell($largeur_dispo,$h_cell, '',$bordure,2,''); // On va écrire les lignes avec la taille de police optimale déterminée (cf. $ifmax) $nb_lig=count($ligne); $h=$nb_lig*$hauteur_texte_mm*(1+$r_interligne); $t=$h_cell-$h; if($my_echo_debug==1) my_echo_debug("\$t=".$t."\n"); $bord_debug=''; //$bord_debug='LRBT'; // On ne gère que les v_align Top et Center... et ajout d'un mode aéré if($v_align=='E') { // Mode aéré $espace_v=($h_cell-4*$marge_verticale-$nb_lig*$hauteur_texte_mm)/max(1,$nb_lig-1); } elseif($v_align!='T') { // Par défaut c'est Center //$decalage_v_top=($h_cell-$nb_lig*$hauteur_texte_mm-($nb_lig-1)*$marge_verticale)/2; $decalage_v_top=($h_cell-($nb_lig+1)*$hauteur_texte_mm-$nb_lig*$marge_verticale)/2; } for($i=0;$i<count($ligne);$i++) { if($v_align=='T') { $pdf->SetXY($x,$y+$i*($hauteur_texte_mm+$marge_verticale)); // Pour pouvoir afficher le $bord_debug $pdf->Cell($largeur_dispo,$hauteur_texte_mm+2*$marge_verticale, '',$bord_debug,1,$align); $y_courant=$y+$i*($hauteur_texte_mm+$marge_verticale)-$marge_verticale; $pdf->SetXY($x,$y_courant); if($my_echo_debug==1) { $pdf->myWriteHTML($ligne[$i]." ".$i." ".round($y_courant)); } else { $pdf->myWriteHTML($ligne[$i]); } } elseif($v_align=='E') { $y_courant=$y+$marge_verticale+$i*($hauteur_texte_mm+$espace_v); $pdf->SetXY($x,$y_courant); // Pour pouvoir afficher le $bord_debug $pdf->Cell($largeur_dispo,$h_cell/$nb_lig, '',$bord_debug,1,$align); $pdf->SetXY($x,$y_courant); $pdf->myWriteHTML($ligne[$i]); } else { $y_courant=$y+$decalage_v_top+$i*($hauteur_texte_mm+$marge_verticale); // Pour pouvoir afficher le $bord_debug A REFAIRE $pdf->SetXY($x,$y_courant); $pdf->myWriteHTML($ligne[$i]); } } }