1

Bonjour,

Tous d'abord je tiens a féliciter le createur de html2pdf, grace a lui j'arrive avec cette classe a creer un pdf a partir de donnees dynamique recuperer sur une base de donnée.

Par contre je suis confronte a un probleme que je n'arrive pas a resoudre.

J'ai defini les marges de mon document dans les parametres de la fonction HTML2PDF cepandant lorsque j'ai un tableau avec TD qui dispose d'un contenu important le retour a la ligne de ce contenu se fait au moins 20-30 mm de retard, le contenu manquant depasse donc de la page et n'est pas affiché.

Quant j'affiche du texte tous ce passe bien, les marges de la page sont respectées.


Quelqu'un a une solution a ce probleme ?

2

[comme d'habitude : merci de PRECISER version de PHP et de HTML2PDF]

pourrais tu me donner un exemple de code html engendrant ce pb ?
Ancien pseudo : lolo

3

Desoles pour le manque de precision.

PHP 5, HTML2PDF v3.13

J'ai repris les fichier d'origine de la classe pour faire les tests

Voici mon code:

<?php

require_once('html2pdf/html2pdf.class.php'); //Classe de l'author Laurent MINGUET <webmaster@spipu.net>
$pdf = new HTML2PDF('P','A4', 'fr');
ob_start();

$sequence="

<table cellpadding='1' cellspacing='1' border='1'>
<tr>
<td>1 TD olo bolo bolo bolo bolo -- le tableau depasse de la page avec 2 td---lo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bo</td>
<td>2 cellule TD bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo </td>
</tr>

</table>

<br><br>

<table cellpadding='1' cellspacing='1' border='1'>
<tr>
<td>tableau 2 avec un seule TD et un seul TR olo bolo bolo -- le tableau ne depasse pas de la page avec 1 td- par tr-- bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bo
</td>

</tr>

</table>

<br><br>

<table cellpadding='1' cellspacing='1' border='1' >
<tr>
<td >1td 1tr tableau3 olo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bo</td>
</tr>
<tr>
<td >1e td 2tr tableau 3 olo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bo</td>
<td >2e td 2tr cellule tableau 3olo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bo</td>
</tr>

</table>

<br><br>
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bo
lo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bo
lo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo
";


echo "<page backtop='40mm' backbottom='10mm'>";
echo $sequence;
echo"</page>";

$content = ob_get_clean();
$pdf->WriteHTML($content, isset($_GET['vuehtml']));
$pdf->Output();
mysql_close();

?>


Je continu a cherche de mon coté si vous avez des idées de soluce, elles sont les bienvenue.

merci

4

je vais regarder ça de plus près.

par contre, juste comme ca

<?php
require_once('html2pdf/html2pdf.class.php'); //Classe de l'author Laurent MINGUET <webmaster@spipu.net>
$pdf = new HTML2PDF('P','A4', 'fr');

ob_start();
$sequence="blabla";
echo "<page backtop='40mm' backbottom='10mm'>";
echo $sequence;
echo"</page>";
$content = ob_get_clean();

$pdf->WriteHTML($content, isset($_GET['vuehtml']));
$pdf->Output();
?> 


et

<?php
require_once('html2pdf/html2pdf.class.php'); //Classe de l'author Laurent MINGUET <webmaster@spipu.net>
$pdf = new HTML2PDF('P','A4', 'fr');

$sequence="blabla";
$content = "<page backtop='40mm' backbottom='10mm'>".$sequence."</page>";

$pdf->WriteHTML($content, isset($_GET['vuehtml']));
$pdf->Output();
?> 


ca revient au meme...
Ancien pseudo : lolo

5

En fait, le problème vient du fait que html2pdf ne sait pas déterminer les largeurs les plus logiques des TD automatiquement, à l'inverse d'un navigateur WEB, ca serait trop gourmand en calcul, et demanderait de tout pré calculer dans la page, afin de prédire toutes les tailles. bcp trop gourmand en mémoire, et surtout en tant de calcul (>30 secondes pour des pages assez simples)

Il faut donc du coup indiqué pour chaque élément la largeur. Pour un tableau à 2 colonnes, il faut donc mettre style="width:100%" sur la table, et style="width: 50%" sur les 2 td (ou 30% et 70% par exemple pour les TD, tant que le total fait 100% )

voici donc le code HTML qu'il faudrait fournir :

<page backtop='40mm' backbottom='10mm'>
	<table cellpadding='1' cellspacing='1' border='1' style="width: 100%">
		<tr>
			<td style="width: 50%">1 TD olo bolo bolo bolo bolo -- le tableau 
depasse de la page avec 2 td---lo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo
 bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo
 bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bo</td>
			<td style="width: 50%">2 cellule TD bolo bolo bolo bolo bolo bolo
 bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo </td>
		</tr>
	</table>
	<br><br>
	<table cellpadding='1' cellspacing='1' border='1' style="width: 100%">
		<tr>
			<td style="width: 100%">tableau 2 avec un seule TD et un seul TR
 olo bolo bolo -- le tableau ne depasse pas de la page avec 1 td- par tr-- bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo
 bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bo</td>
		</tr>
	</table>
	<br><br>
	<table cellpadding='1' cellspacing='1' border='1'  style="width: 100%">
		<tr>
			<td colspan="2"  style="width: 100%">1td 1tr tableau3 olo bolo bolo
 bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo
 bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo
 bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bo</td>
		</tr>
		<tr>
			<td  style="width: 50%">1e td 2tr tableau 3 olo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bo</td>
			<td  style="width: 50%">2e td 2tr cellule tableau 3olo bolo bolo bolo
 bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bo</td>
		</tr>
	</table>
	<br><br>
	bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo
 bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bo
	lo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bo
	lo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo 
bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo bolo
</page>


désolé pour cette limitation
Ancien pseudo : lolo

6

Merci de ton analyse et de ta rapidité de reponse en tous cas.

J'avais effectivement remarqué que les width sont systematiques dans les exemples.

Cependant ce qui m'interroge aussi c'est que lorsque aucun width est signalé le retour a la ligne du texte contenu dans un td qui depasse se fait comme meme mais apres avoir depassé le A4 de au moins 40 px.

J'ai essayé de jouer sur les marges, les backright, padding-right sans reussir a determiner quel limitation pour resoudre mon probleme.

En tous cas merci de ton aide

7

En fait, pour déterminer la taille d'un TD, il prend la taille indiqué dans le style (si elle est présente), sinon, il essaye de voir quelle largeur au maximale prend le contenu si on l'affiche sur une page sans marge. Si le TD ne rentre quand même pas dans la largeur si elle est précisée (une grande image par exemple), il prendra la plus grande largeur des deux afin que le contenu rentre toujours dans le TD

Dans ton cas, le texte étant très long, et étant donné qu'aucune largeur n'était précisé pour le RD, il prend toute la largeur de la page (21cm pour du A4) et ceci devient la largeur du TD => étant donné que dans ton document final, tu as une marge à gauche, le td depassera d'autant à droite.

ok ?
Ancien pseudo : lolo

8

ok merci pour ces précisions !

9

Bonjour,

on est obliger de definir les largeur en % pour ce probleme ? <td style="width: 50%">

il est pas possible de faire :<td style="width: 150px"> ou <td style="width: 150mm">

Faut il definir la largeur dans toute les ligne tu tableau ou sur l'entete cela suffit ?

Je n'arrive pas à ce qu'un texte long revienne a la ligne suivant la largeur definie de la cellule(colonne) sad

10

il faut préciser la largeur de TOUS les TD. les %, mm, px, pt sont autorisés
Ancien pseudo : lolo