FPDF et MultiCell()

FPDF et MultiCell() - PHP - Programmation

Marsh Posté le 11-04-2011 à 13:58:23    

Bonjour.
 
J'essaie d'utiliser le multicell de fpdf, mais j'ai un soucis.
 
j'ai une ligne, comprenant dans l'ordre :
 
Date - Nom Prénom - Moyen de paiement - Montant
 
Donc, 4 colonnes.
j'utilise des Cell sauf pour le noms des MultiCell au cas où le nom soit trop grand.
 
Donc, je suis obligé de faire des getx gety et setx sety pour me recaler pour le moyen de paiement et le montant.
 
Mon soucis vient du fait que je ne sais pas comment recaler le total de la ligne qui a un nom à rallonge.
en lui mettant un $y+10 par exemple, s'il y a une ligne de plus.
 
voici le bout de code qui gère l'affichage du pdf :

Code :
  1. $pdf->Cell(20,10,"" );
  2.  $pdf->Cell(40,10,dateUsToFr($date));
  3.  $x = $pdf->getX();
  4.  $y = $pdf->getY();
  5.  $pdf->MultiCell(55,10,$Tb['Nom_Patient']." ".$Tb['Prenom_Patient'],1);
  6.  $pdf->setX($x+60);
  7.  $pdf->setY($y);
  8.  if ($Tb['Moyen_Paiement']=="Chèque" AND $Tb['Numero_Cheque']!="" )
  9.  {
  10.   $num_chq="(".$Tb['Numero_Cheque']." )";
  11.  }
  12.  $pdf->setX($x+60);
  13.  $pdf->Cell(40,10,$Tb['Moyen_Paiement']." ".$num_chq);
  14.  $pdf->setX($x+100);
  15.  $pdf->Cell(30,10,$Tb['Montant_TTC']);
  16.  $pdf->Ln();
  17.  $total_general+=$Tb['Montant_TTC'];


Reply

Marsh Posté le 11-04-2011 à 13:58:23   

Reply

Marsh Posté le 11-04-2011 à 14:17:19    

Peut-être faudrait-il remplacer :

$pdf->Cell(30,10,$Tb['Montant_TTC']);

par :

$y = $pdf->getY();
 $pdf->setY($y + 10);
 $pdf->Cell(30,10,$Tb['Montant_TTC']);


Ou alors, je n'ai pas compris la question ?

Reply

Marsh Posté le 11-04-2011 à 14:38:23    

Non, tu as raison, je me suis mal exprimé.
En fait, j'ai tenté cela, mais cela me décale tous les moyens de paiement et totaux à la ligne du dessous.

 

ex :

 

11/04/2011  Mr Dusmoque Alain     Chèque 75€
11/04/2011  Mme De La villadières Chèque 65€
                  Marie-genevièves

 

Donc, ma multicell fonctionne bien, mais j'aimerai que le montant et le moyen de paiement soit à y+10 Si et seulement si la multicellule à 2 lignes, si 3, alors y+20 etc...

 

car ensuite j'ai un total, et se total s'écrit par dessus le prénom qui est sur la seconde ligne de la multi cellule.

 


Je vais faire un screen, cela sera plus simple
j'ai mis les bordures, pour bien voir la multicell

 

http://www.izipik.com/images/201104/11/h7shi9kdx1gxmiogow-pdf.png

 


En gros ce que j'aimerai c'est un
if (multicell == 2 lignes) { $y = $y+10}

 

mais aucune idée si cela existe et comment le syntaxier


Message édité par Bakk15 le 11-04-2011 à 14:41:07
Reply

Marsh Posté le 11-04-2011 à 15:39:26    

"La méthode NbLines() renvoie le nombre de lignes qu'occupe un MultiCell."
C'est ce qui est indiqué sur la page "Tableau avec MultiCells" de l'onglet "Scripts" du site http://www.fpdf.org/
 
Je ne sais pas très bien quels paramètres donner à NbLines, mais cela doit pouvoir se trouver.


Message édité par olivthill le 11-04-2011 à 15:39:47
Reply

Marsh Posté le 11-04-2011 à 16:10:35    

merci beaucoup, je vais regarder cela :jap:

Reply

Marsh Posté le 11-04-2011 à 16:40:48    

Donc, c'était bien cela :

 
Code :
  1. function NbLines($w,$txt)
  2. {
  3. $cw=&$this->CurrentFont['cw'];
  4. if($w==0)
  5.  $w=$this->w-$this->rMargin-$this->x;
  6. $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
  7. $s=str_replace("\r",'',$txt);
  8. $nb=strlen($s);
  9. if($nb>0 and $s[$nb-1]=="\n" )
  10. $nb--;
  11. $sep=-1;
  12. $i=0;
  13. $j=0;
  14. $l=0;
  15. $nl=1;
  16.  while($i<$nb)
  17.  {
  18.   $c=$s[$i];
  19.   if($c=="\n" )
  20.   {
  21.    $i++;
  22.    $sep=-1;
  23.    $j=$i;
  24.    $l=0;
  25.    $nl++;
  26.    continue;
  27.   }
  28.   if($c==' ')
  29.       $sep=$i;
  30.   $l+=$cw[$c];
  31.   if($l>$wmax)
  32.   {
  33.    if($sep==-1)
  34.    {
  35.     if($i==$j)
  36.      $i++;
  37.    }
  38.    else
  39.     $i=$sep+1;
  40.    $sep=-1;
  41.    $j=$i;
  42.    $l=0;
  43.    $nl++;
  44.   }
  45.   else
  46.       $i++;
  47.  }
  48.       return $nl;
  49. }
 


et l'appel :

 
Code :
  1. $nb = $pdf->NbLines(55,$txtnp);
 

$nb est donc mon nombre de lignes

 

avec mon petit if

 
Code :
  1. if($nb>1)
  2.   $y=$y+10;
 

merci :jap:


Message édité par Bakk15 le 11-04-2011 à 16:41:49
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed