PDF Azur - Description produit avec puces

Bonjour,

Effectivement le problème vient de la librairie TCPDF.
Mon module corrige cela (InfraSPackPlus).
Sinon il faut modifier le modèle PDF et avant la ligne $pdf->Open(); il faut ajouter :

$tagvs = array('p' => array(1 => array('h' => 0.0001, 'n' => 1)), 'ul' => array(0 => array('h' => 0.0001, 'n' => 1)));
$pdf->setHtmlVSpace($tagvs);

Cordialement,
Sylvain Legrand.

1 « J'aime »

EDIT : Sylvain a été plus rapide :wink:

Il y en a un peu moins mais encore trop entre le titre et la description.
C’est peut être la posy de la description qui laisse un espace avant le titre.

image

En tous cas un grand merci pour votre retour si rapide les gars.
C’est cool d’avoir une entraide communautaire de ce genre.

… Je rebondi moi même.

Quoi que non, puisque lorsqu’il n’y a pas de puces, la description est bien juste en dessous du titre.
C’est donc bien que avec la génération du PDF avec les puces.

Sur la description du produit, si j’essaie d’appliquer un style CSS, celui-ci disparait.

Et quand je modifie le fichier contents.css, ce n’est pas pris en compte, comme si il y avait un cache interne à Dolibarr.

Slt

Met des asterisques a la place des puces :wink:

Je ne pense pas que le CSS soit pris en compte au moment de générer le PDF. Je n’ai pas vérifié mais je pense que TCPDF va générer un document PDF en fonction des balises HTML sans tenir compte du CSS.
Sur les listes à puce, tu as 2 balises : ul pour débuter la liste à puces et li pour chaque puce. Le code donné par Sylvain paramètre 1 espace de valeur 0.0001 sur la balise ouvrante ul. Peut-être faudrait-il rajouter la même chose pour la balise li ?

$tagvs = array('p' => array(1 => array('h' => 0.0001, 'n' => 1)), 'ul' => array(0 => array('h' => 0.0001, 'n' => 1)), 'li' => array(0 => array('h' => 0.0001, 'n' => 1)));
$pdf->setHtmlVSpace($tagvs);
1 « J'aime »

Ca c’est une solution de contournement… Pas une solution pérenne.

Alors j’ai réussi à faire un peu mieux, mais il y a toujours un espace à la balise UL ouvrante ou au P fermant

        $tagvs = array(
            'p' => array(
                1 => array('h' => 0.0001, 'n' => 1),
                0 => array('h' => 0.0001, 'n' => 1)
            ),
            'ul' => array(
                1 => array('h' => 0.0001, 'n' => 1),
                0 => array('h' => 0.0001, 'n' => 1)
            ),
            'li' => array(
                1 => array('h' => 0.0001, 'n' => 1),
                0 => array('h' => 0.0001, 'n' => 1)
            )
        );

image

Je pense que c’est à la balise UL ouvrante car sur le produit du dessous où il y a qu’une balise P, il n’y a pas d’espace en dessous.

Donc le paramètre 'ul' => array(0 => array('h' => 0.0001, 'n' => 1) ne fonctionne pas.

Et si tu regardes le HTML de ton document avant d’en faire un PDF, tu n’as pas une autre balise HTML qui s’intercale avant le UL ? Un SPAN par exemple ? Ou autre chose ?

Voici le code dans le ckediteur :

<ul>
	<li><span style="font-size:8px">USB</span></li>
	<li><span style="font-size:8px">R&eacute;solution maximale :</span>
	<ul>
		<li><span style="font-size:8px">Ultra HD 4K : 4096 x 2160 pixels &agrave; 30 images/seconde</span></li>
		<li><span style="font-size:8px">Full HD 1080p :&nbsp;1920 x 1080 pixels &agrave; 30 ou 60 images/seconde</span></li>
		<li><span style="font-size:8px">HD 720p : 1280 x 720 pixels &agrave; 30, 60 ou 90 images/seconde</span></li>
	</ul>
	</li>
	<li><span style="font-size:8px">Champ de vision :</span>
	<ul>
		<li><span style="font-size:8px">Diagonal : 90&deg;</span></li>
		<li><span style="font-size:8px">Horizontal : 82,1&deg;</span></li>
		<li><span style="font-size:8px">Vertical : 52,2&deg;</span></li>
	</ul>
	</li>
</ul>

Pas de span ou autre.
Par contre je ne sais comment regardé le code HTML généré.

Alors, un peu plus de précision :

Là, finalement, on s’aperçoit qu’il n’y a plus du tout d’espace entre les P, UL, LI, etc…
Mais toujours un espace entre le titre et la description.

image

Et tu ne l’as pas si tu n’as pas de liste à puce ?

Si, en fait l’espace se place si la description est en HTML.
J’ai mis la description du produit du dessous en l’englobant dans une balise P et là un espace se rajoute (que je n’ai pas sans les balises HTML).

Rien à voir mais j’ai aussi un warning lors d’ajout de produit à une propal :

Warning: A non-numeric value encountered in /htdocs/comm/propal/card.php on line 1041

Le message apparait très rapidement. J’ai réussi à en faire une capture d’écran.

*EDIT : Bon pour ca j’ai désactivé les messages d’erreurs non bloquant en suivant ce post : Warning: A non-numeric value encountered

Il y a un saut de ligne ajouté dans pdf.lib.php
Recherche :

		if ($libelleproduitservice && empty($hidedesc))
		{
			$libelleproduitservice.='__N__';
		}

et commente la ligne

$libelleproduitservice.='__N__';
1 « J'aime »

Bravo :clap:

Je cherchais dans la fonction pdf_writelinedesc sans avoir vu qu’elle faisait appel à la fonction pdf_getlinedesc

Voici le résultat :

image

Bon alors je pense qu’il est nécessaire de rajouter un espace entre le titre et la description mais l’espace doit être divisé par deux par rapport ce qu’il était.
Je vais donc voir pour en rajouter un léger.

1 « J'aime »

Le __N__ est un saut de ligne mais ensuite tu peux peut-être adapté un truc. Par exemple en ajoutant une balise puis en fixant la taille de l’espace de cette balise avec setHtmlVSpace par exemple :wink:

1 « J'aime »

Yes, bien joué/trouvé :+1:
Je m’y attaque immédiatement

D’ailleurs il serai mieux je pense de réduire la taille de la description afin qu’elle prenne moins de place et soit moins visible par rapport au titre (priorité).

Je découvre un peu cette partie mais je trouve pas top que le titre et la description soit récupérée par pdf.lib.php car du coup à part modifier ce fichier, on n’a pas de solution pour personnaliser ça directement dans un modèle que l’on pourrait créé. Je trouverais plus souple de pouvoir paramétrer ces différents points directement dans le modèle PDF… A moins qu’il existe une solution que je n’ai pas rencontré…

Je suis d’accord avec toi.
A la prochaine mise à jour, hop, plus rien ou sinon faut tout recommencer.

Mais j’ai déjà eu le cas pour plusieurs choses (et pas que sur Dolibarr).

  • Sur l’import des CGV à la génération de document j’ai du supprimer la ligne du footer qui se créé depuis la fonction pdf_pagefoot en rajoutant un paramètre à l’appel de la fonction (donc sous condition)
  • Rajout d’espace insécable avant toutes doubles ponctuations.
  • Il est indispensable pour moi de mettre « ref : » avant la référence afin de savoir de quoi on parle…

Par contre je pense qu’il est obligé de généré la description du produit/service depuis pdf.lib, il y a plusieurs conditions et beaucoup de champ à aller chercher. Ca serai trop long sur les modèles. Et puis, si il doit y avoir un changement, tes modèles ne suivront plus.

Par contre, ce qu’il serai bien de faire, c’est de rajouter des paramètres supplémentaires à l’appel de la fonction depuis le modèle.

Voici ce que j’ai réussi à produire :

Tout un tas de petite chose que malheureusement nous ne pouvons modifier sans devoir tout refaire à chaque MAJ.