1

Bonjour à tous et merci au créateur de cette librairie tellement pratique smile
Mon problème est assez simple. J'écris dans une case d'un tableau un texte de longueur très variable.
Quand ce texte est trop long, au lieu d'en laisser une partie dans la première page et de mettre la suite dans la deuxième, tout le bloc est déplacé sur la deuxième page, ce qui n'est pas très glop glop.
Je suis en PHP 4, avec la version 3.13 de HTML2PDF
Merci à celui qui pourra me dépanner, je lui en serais fort reconnaissant.
Voici le code que j'utilise (j'ai mis en majuscule le texte variable)
<page>
<table style="width: 100%">
	<tr>
		<td style="width: 15%; text-align: right;">
			Du texte  fixe
		</td>
		<td style="width: 5%">&nbsp;</td>
		<td style="width: 40%">&nbsp;</td>
		<td style="width: 30%">
                      Du texte fixe
		</td>
	</tr>
	<tr>
		<td style="width: 15%; text-align: right;">
			Du texte normal
		</td>
		<td style="width: 5%">&nbsp;</td>
		<td colspan="2" style="width:70%">
                        DU TEXTE VARIABLE QUI PEUT ALLER DE 10 A 200 LIGNES
			<table style="width:100%">
				<tr>
					<td style="width:50%">&nbsp;</td>
					<td style="width:50%; text-align:left">
						Du texte fixe
					</td>
				</tr>
			</table>
		</td>
	</tr>
</table>
</page>

2

ben le problème, c'est qu'il n'est pas fait pour pouvoir découper les cases, pour des raisons d'alignement et de calcul des tailles des différentes cellules du tableau

Excel fait exactement la même chose quand tu veux imprimer quelque chose : il fait un saut de page quand une cellule ne rentre pas

donc y a pas vraiment de solution . Le plus simple serait que tu change ton code html pour découper en lignes
Ancien pseudo : lolo

3

Merci quand même pour la réponse smile
Ce que j'ai fini par faire :
- Trouver empiriquement le nombre de lignes qu'accepte chaque page
- Compter à peu près le nombre de lignes que prenait chaque texte (en me basant sur un nombre de caractères calculé empiriquement)
- Si, quand je vais écrire un bloc de texte (en fait mon bloc de taille variable est une itération sur les paragraphes composant le document) ,j'arrive à un total de lignes > celui supporté par une page, je ferme ma page et j'en ouvre une autre sur laquelle j'écris les nouveaux blocs.

4

Pourquoi la librairie ne pourrait-elle pas faire ce travail toute seule ?

je m'explique: Erreur 7: TD trop grande

on test le nombre de ligne que l'on peut mettre sur le restant de la page on les met sur la première page.
Sur la seconde page, on crée une nouvelle ligne (tr) avec les mêmes caractéristiques et on ajoute la suite du texte. On effectue la même opération si le texte ne tient toujours pas sur 2 pages.

Ce n'est pas envisageable ?

5

et si t'as plusieurs colonnes par tr ? il faut qu'ils aient tous la même auteur... et c'est bien là le problème... il faudrait commencer par remplir ce qui rentre du premier TD dans la premiere page, puis remplir ce qui rentre du 2e td dans la 1premire page, et ainsi de suite pour toutes les colonnes, puis sauter une page, revenir au premier td, et recommencer...

si il y a un seul TD, ca marche déjà (cf la méthode setTestTdInOnePage), mais si il y en a plus, non...
Ancien pseudo : lolo

6

Ce serait trop gourmand en ressource ou c'est trop compliqué à coder ?

7

les 2 en fait smile la manière dont je gère actuellement les tableaux ne le permettrait pas... et puis ca foutrait le bordel pour les colspan / rowspan, les borders, les fonds, les tableaux dans les tableaux, ..., .... (et oui, il faut penser à toutes les implications avec ce genre de cas...)

là, au moins, je sais que les différents cas possibles marchent avec la restriction qu'un TD ne peut pas être sur plusieurs pages
Ancien pseudo : lolo

8

Si c'est possible pour 1 TD, ne pourrait-on pas généraliser et permettre cette possibilité si les hauteurs des différentes colonnes de la ligne sont identiques, plutôt que d'afficher le message d'erreur ?

9

Spipu (./7) :
la manière dont je gère actuellement les tableaux ne le permettrait pas...


wink
Ancien pseudo : lolo

10

Bonjour à tous,

je génère dynamiquement des tableaux avec des données issues d'une base de données (remplie par l'utilisateur) et j'ai vite rencontré l'erreur n°7. Je voudrais donc voir avec vous comment je pourrais faire pour calculer le nombre de lignes et donc le nombre de caractères maximum que peut contenir une cellule? Ainsi je pourrais limiter le nombre de caractère par champ pour l'utilisateur.

Merci d'avance,

11

tu utilises quelle version de HTML2PDF ? car il y avait des erreurs à ce niveau là dans les anciennes versions...
Ancien pseudo : lolo

12

merci pour la réactivité :-)

J'utilise la version HTML2PDF v4.00.

Existe t il une fonction dans la librairie me permettant de connaitre le nombre de caractère dans la cellule?




13

non, aucune, mais essayes avec la version 4.01, car il y avait un bug dans la 4.00
Ancien pseudo : lolo

14

J'ai dl la version 4.1. Le résultat est bien plus joli avec des données qui fonctionnent : merci!

En revanche, il y a toujours un nombre limité de caractères par cellule. A ce propos, voici le texte d'erreur que j'obtiens :

"Fatal error: Uncaught <span style="color: #AA0000; font-weight: bold;">ERREUR n°7</span><br>Fichier : /opt/lampp/htdocs/CI_DATABASE/lib/html2pdf/html2pdf.class.php<br>Ligne : 4785<br><br>le contenu d'une balise TD ne rentre pas sur une seule page thrown in /opt/lampp/htdocs/CI_DATABASE/lib/html2pdf/html2pdf.class.php on line 4785"

Comme il n'y a pas de fonction existante, quelqu'un aurait il une idée de la mnière de faire pour compter le nombre de caractères par cellule?

Merci d'avance.

15

le problème est que c'est impossible : ca dépend de la largeur de ta case, de la taille de ton texte, de sa fonte, si il y a du gras, des imagees, et autres... donc c'est à toi de faire des essais pour voir en fonction de ta mise en page ce que tu peux autoriser à l'utilisateur
Ancien pseudo : lolo

16

Je pense qu'il y a problème de clonage....
Le numéro de page ne semble pas se ré-initaliser lorsque après le clone.

Essayer ceci cela fonctionne pour moi :

Ajouter la ligne ci-dessous au html2pdf.class.php :
HTML2PDF::$SUBOBJ->pdf->getPage();

juste avant celle-ci (ligne 763 pour la version 4.01) :
$sub_html = clone HTML2PDF::$SUBOBJ;

Bon courage

17

en effet, comme je l'ai marqué ici topics/135573-pb-avec-hebergeur-free#18

mais je ne sais pas du tout pourquoi cela se produit sad
Ancien pseudo : lolo

18

C'est marrant, Spipu, je suis tombé sur la même conclusion que toi !

Après un echo de getPage() pour tracker je me suis aperçu que cela fonctionnait.

A+


19

t'aurais une idée du pourquoi de la chose ? car là je vois pas ... sad
Ancien pseudo : lolo

20

Tout d'abord bonjour, et merci pour cette librairie,
J'ai le même problème que pas mal de monde, j'ai valider mon code , mais j'ai toujours le problème en 4.01 (php5) , en 3.31 (donc php4) tout fonctionne

donc j'ai bien mon pdf généré avec la 3.31 , mais l'erreur du TD trop grande en 4.01. comment faire ?

j'ai fait ceci, code géré avec un print_r($content);

noté que les br que j'avais formaté de cette façon <br /> se sont transformés en <br>
[code]

<page><table width="90%" style="text-align: left;">
<thead>
<tr><th colspan="7"> <i>Commande du : </i>18-03-2011 19:03</th></tr>
<tr><th colspan="7"><i>societe : </i>test</th></tr>
<tr><th colspan="7"><i>nom : </i>test<br></th></tr>
<tr><th colspan="7"><i>adresse : </i>test<br>test<br>test<br></th></tr>
<tr><th colspan="7"><i>pays : </i>test</th></tr>
<tr><th colspan="7"><i>telephone : </i>test</th></tr>
<tr><th colspan="7"><i>email : </i>test@test.Fr</th></tr>
<tr> <th colspan="7"><i>vat : </i>12132</th></tr>
<tr><th>n°</th><th>reference</th><th>designation</th><th>colisage</th><th>quantite</th><th>prix</th><th>prix total</th></tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">BOT06</td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">bottes matelassées moutarde motifs éléphants indiens noirs </td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">lot de 2 pièces3-9 mois</td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">4</td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">23</td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">92</td>
</tr>
<tr>
<td>2</td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">CV45</td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">couverture paon </td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;"></td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">4</td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">29.00</td>
<td style="border: 1px solid; font-weight: normal; padding: 0.5mm; text-align: center;">116</td>
</tr>
</tbody></table>
</page>

[/code]

21

Ancien pseudo : lolo

22

Effectivement ! plus d'erreurs ! et je ne suis pas chez free pourtant. mais sur une config perso.

PHP Version 5.2.0-8+etch16

merci bien spipu ! (d'ailleurs, je sais pas si ça un rapport, mais je met en place html2pdf sur un spip là )