Пример #1
0
				}
				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();
Пример #2
0
 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");
                     }
                 }
             }
         }
     }
 }
Пример #3
0
/**
 * 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]);
		}
	}
}