Fiche intervention : gestion interligne

Bonjour,

Sur Dolibarr 2.4, la description d’une action sur le pdf de la fiche d’intervention au modèle soleil présente des interlignes très grands.
Le code en question :

[code]
$num = sizeof($fichinter->lignes);
$i=0;
if ($num)
{
while ($i < $num)
{
$fichinterligne = $fichinter->lignes[$i];

					$valide = $fichinterligne->id ? $fichinterligne->fetch($fichinterligne->id) : 0;
					if ($valide>0)
					{
						$ij = $i+1;
          $pdf->SetXY (20, $tab_top + 16 + $i * 20); 
                        $pdf->SetFont('Arial','B', 10);
                      $pdf->writeHTMLCell(190, 8, 20, $tab_top + 16 + $i * 20,
                         //dol_htmlentitiesbr($langs->transnoentities("Date")." : ".dolibarr_print_date($fichinterligne->datei)." - ".$langs->transnoentities("Duration")." : ".ConvertSecondToTime($fichinterligne->duration)), 0, 'J', 0); 
                       "Action n°" . $ij . " (Dur&eacute;e :". dol_htmlentitiesbr(date("H",$fichinterligne->duration) - 1 ."h".date("i",$fichinterligne->duration)."), terminée le ".dolibarr_print_date($fichinterligne->datei). " : "), 0, 'J', 0);
                       $pdf->SetFont('Arial','', 10);
                         
                        $pdf->SetXY (20, $tab_top + 22 + $i * 20); 
                        $pdf->writeHTMLCell(170, 8, 20, $tab_top + 1 + $i * 20,
                         dol_htmlentitiesbr($fichinterligne->desc,1), 0, 0, 0);
						$tab_height+=20;
					}
					$i++;
				}
			}[/code]

Je pensais que cela venait de la fonction dol_htmlentitiesbr, mais elle est utilisée par ailleurs et ne semble pas produire ce problème.
J’utilise FCKEditor, peut-être un problème de filtrage à ce niveau ?
Si vous avez une idée, je suis preneur :wink:
Merci

Le pb doit etre corrigé en 2.5. A tester…

Ok, je regarde la 2.5 dès que j’ai un moment.

Je viens de faire le test dans une 2.5.1 sans utiliser FCKEditor et visiblement le résultat est le même :

fichinter.jpg

Je regarde dans pdf_soleil_modules.php mais je ne vois pas bien où changer ce comportement.

Merci.

En cherchant un peu, j’ai trouvé que le problème d’interlignes semble venir de la ligne 2062 dans fpdf.php avec le writeHTML. Le second paramètre est à « true » par défaut. En ajoutant un paramètre à la fonction :

function writeHTMLCell($w, $h, $x, $y, $html=’’, $border=0, $ln=0, $fill=0, $newline=true)

et en changeant la ligne 2062 par

$this->writeHTML($html, $newline, $fill);

Cela corrige le problème d’interligne dans les fiches d’intervention en ajoutant la valeur false à la fin de la ligne 279 de pdf_soleil_modules.php. En revanche, cela change la mise en page. J’ai donc changé la valeur 4 par 6 en ligne 291 :

$pdf->writeHTMLCell(0, 4, 20, $tab_top + 6 + $j * $height,

et 4 par 1 en ligne 296 :

$tab_height+=($height+1);

Enfin, j’ai changé la valeur 16 de $height en ligne 267 par 14.

Cela semble donner de bon résultats à condition de n’avoir qu’une page pour la fiche d’intervention. Ensuite cela part dans tous les sens.

Cette solution n’est pas nécessairement la plus élégante et elle ne solutionne par l’interligne de la description générale de l’intervention. Si une solution plus fiable est trouvée, je suis preneur.

Après un peu de recherches, voici une version améliorée de la solution précédente (qui posait des problème de positionnements X,Y dans la page). Je garde les modifications du côté du fpdf.php et je modifie le pdf_soleil_modules.php de la façon suivante :

$ligneprec=0;
if ($num)
{
while ($i < $num)
{
$fichinterligne = $fichinter->lignes[$i];
$valide = $fichinterligne->id ? $fichinterligne->fetch($fichinterligne->id) : 0;
if ($valide>0)
{
$pdf->writeHTMLCell(0,0,0,0,"",0,0,0,false);
$pdf->writeHTMLCell(0, 4, 20, $tab_top + 5*$ligneprec,dol_htmlentitiesbr($outputlangs->transnoentities(« Date »)." : « .dolibarr_print_date($fichinterligne->datei,’’,false,$outputlangs). » - « .$outputlangs->transnoentities(« Duration »). » : ".ConvertSecondToTime($fichinterligne->duration),1,$outputlangs->charset_output), 0, 0, 0);

$descr = str_replace(« é »,« é »,$outputlangs->convToOutputCharset($fichinterligne->desc));
$descr = str_replace(« è »,« è »,$descr);
$descr = str_replace(« à »,« à »,$descr);
$descr = str_replace(« ê »,« ê »,$descr);
$descr = str_replace(« ù »,« ù »,$descr);
$descr = str_replace(« ô »,« ô »,$descr);
$descr = str_replace(« û »,« û »,$descr);
$descr = str_replace("<","<",$descr);
$descr = str_replace(">",">",$descr);
$pdf->writeHTMLCell(0, 3, 20, $tab_top + 4 + 5*$ligneprec,dol_htmlentitiesbr($descrpz,1), 0, 0, 0);
$tab_height+=($height+1);
$ligneprec += floor(strlen($fichinterligne->desc)/130)+2;
$j++;
}
$i++;
}
}

Dans ce code modifié, j’ai été obligé d’ajouter une ligne avec un writeHTMLCell invisible pour éviter les interlignes trops grands. J’ai également ajouté un comptage (très approximatif et il faudra certainement amélioré ce point) du nombre de lignes pour chaque détail de l’intervention. J’ai fixé de façon très arbitraire par rapport à quelques tests le nombre de caractères sur une ligne à 130. Ce comptage des lignes est nécessaire dans mon cas dans la mesure où un intervenant peut être amené à avoir plus de 3 lignes de commentaires qui correspondent à la hauteur fixée à 16 par défaut par détail.

Mes tests me donnent des résultats plutôt bons pour le moment, mais ne connaissant rien au PHP et à la librairie FDPF, je suppose qu’il y a des solutions bien plus universelles et efficaces. Alors si quelqu’un peut me suggérer quelque chose de mieux (notamment au niveau du comptage des lignes) !

Merci.

Peux-tu saisir une intervention qui poserais pb sur le site de démo. Je n’arrive pas a reproduire avec la CVS.

Sauf erreur de ma part, il n’y a pas d’accès aux fiches d’intervention dans la démo. Ou alors je ne parviens pas à trouver l’accès ! Je suppose que le module n’est pas activé.

Exact. J’ai activé le module.

Bonsoir Eldy, je viens donc de créer une fiche d’intervention sur la démo :

http://demo.dolibarr.org/fichinter/fiche.php?id=4

Je n’ai pas de problème d’interligne sur la description générale de la fiche, mais en revanche les lignes de détail ne s’affichent pas (uniquement dates et heures). Au passage une petite question : comment faire pour avoir des dates au format français (févr. au lieu de feb par exemple).

Merci de ton aide.

Des nouvelles sur les fiches d’intervention ???

J’ai également eu ce problème.
Voici une version du fichier qui pourrait résoudre vos problèmes.
A tester et retester, mais cette version ne prend pas en charge le HTML dans la description / les lignes de l’intervention.

Bon amusement,

Hadrien

pdf_soleil-15be072af183ab731db2e7c87373bdc2.txt (13.5 KB)

Je confirme, ayant eu le même problème et ayant tester le fichier que tu as envoyé, cela fonctionne correctement! (même si les #0 #1 #2 etc…sont pas jolie…) je vais essayer de changer l’écriture aussi…

Merci pour avoir mis à disposition le code source du fichier!

bonjour,

je confirme je suis confronté au même pb, les lignes dans la fiche d’intervention n’affichent que date et heure et pas le détail des l’intervention.

Merci à hminet pour le fichier

Bon, j’avais écrit des explications concernant l’absence des descriptions dans la dernière version de Dolibarr, mais le forum a estimé que je suis trop lent pour les taper. Donc voilà une version corrigée.
Autres modifs :
- réduction de la hauteur de la ligne pour le calcul de la taille du cadre entourant les descriptions
- augmentation du nombre de caractères par ligne pour le calcul de la taille du cadre yadayada ( (210 - 10 - 10) / (9 * 25.4 / 72) * 2.22 pour ceux qui veulent tout savoir)

pdf_lune.txt (16 KB)