PDF Azur - Description produit avec puces

Dolibarr v9.0.1

Bonjour à tous,

J’ai un problème avec la description des produits sur la génération de document (propal, facture, etc…)
En effet, lorsqu’on utilise des puces, un padding ou margin important se rajoute entre le titre du produit et sa description.

Voici un exemple :
image

J’utilise le modèle azur que j’ai un peu modifier mais pas sur la partie description.
J’ai essayé de rajouter ces lignes CSS dans contents.css du dossier /includes/ckeditor/ckeditor/ :

ol,ul,dl {
margin: 0 !important;
padding: 0 !important;

Mais je pense que c’est à la génération du document, et non à l’affichage sur le produit.
Sur la fonction pdf_writelinedesc qui doit faire partie de pdflib.php.

Il faut remonter plus loin… La fonction pdf_writelinedesc utilise writeHTMLCell de la librairie TCPDF.
Je ne connais pas trop cette librairie mais peut être qu’il y a moyen de configurer la manière dont s’affiche les différents éléments…

EDIT : Ha ! J’ai mal lu le post d’origine ! Je croyais que le soucis était la marge à gauche des puces. Je viens de me rendre compte que c’est entre le titre et la description. Ceci dit, ça peut aussi se trouver au niveau de TCPDF qui ajoute une marge au-dessus d’une liste à puce (du coup tu as une marge classique entre le titre et la description + une marge pour la liste à puce.

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é).