1

J'ai un bloc div que je veux placer de manière absolue en bas de la dernière page de mon pdf.
Seulement il se peut que du contenu se trouve là où je veux placer mon div.
Dans ce cas là il faut que je saute de page.
Ce qui n'est pas géré par le <nobreak> puisque mon div est placé de manière absolue.

En résumé j'aimerai que, si la zone en bas de page de ma dernière page n'est pas libre alors on saute de page pour placer en bout mon div.

Une idée ?

merci

2

tu pourrais essayer ca :

$content1 = "tout ton truc saut la div finale"
$content2 = "ta div finale"

faire un writehtml du content1
regarder la position actueflle dans le pdf (->pdf->getY() de mémoire, à vérifier dans les méthodes de fpdf)
si la place restante n'est pas suffisante => ->setNewPage();
faire un writehtml de $content2

bon, je suis pas sur que ca marche, mais tu peux tjrs essayer comme ca wink
Ancien pseudo : lolo

3

Et ce ne serait pas possible de créer une nouvelle fonction pour html2pdf qui répondrait à mon cas ?

Je veux bien essayer mais je ne connais absolument rien à fpdf et je n'ai pas vraiment le temps pour.

une genre de balise "<bottom_last_page>"

4

ben ca serait plus long que d'appliquer la méthode que je viens de te décrire...

tu l'as essayé ou pas ?

(de plus je ne vais plus avoir le temps de développer de nouvelles fonctionnalités pour html2pdf avant quelque temps, je ne vais faire que de la correction de bug dans les prochaines semaines)
Ancien pseudo : lolo

5

La méthode c'est GetY() mais je n'arrive pas à l'appliquer sur mon objet de type "HTML2PDF".

Sur quel objet faut - il l'appliquer ?

merci

6

je l'ai marqué : ->pdf->GetY() tongue
Ancien pseudo : lolo

7

J'ai donc commencé à coder ma balise !!!

Seulement quelles questions simples :

-quelle est l'unité des dimensions dans fpdf ?

- comment récupérer la hauteur d'une page pdf ? si pas possible quelle est la valeur de cette hauteur ?

- pourquoi je ne trouve pas mon paramètre :

function o_END_LAST_PAGE($param){
if(isset($param['monParam'])){
$height = $param['monParam'];
echo "Hauteur " . $height;
}
}

dans ma page :

<end_last_page monParam="Valeur de mon paramètre">

</end_last_page>

C'est tout pour le moment

8

J'ai donc commencé à coder ma balise !!!

Seulement quelles questions simples :

-quelle est l'unité des dimensions dans fpdf ?

- comment récupérer la hauteur d'une page pdf ? si pas possible quelle est la valeur de cette hauteur ?

- pourquoi je ne trouve pas mon paramètre :

function o_END_LAST_PAGE($param){
if(isset($param['monParam'])){
$height = $param['monParam'];
echo "Hauteur " . $height;
}
}

dans ma page :

<end_last_page monParam="Valeur de mon paramètre">

</end_last_page>

C'est tout pour le moment

9

essaye avec ca :

		function o_END_LAST_PAGE($param)
		{
			$this->style->save();
			$this->style->analyse('END_LAST_PAGE', $param);
			$this->style->setPosition($this->pdf->x, $this->pdf->y);
			$this->style->FontSet();
			
			if ($height = $this->style->value['height'] < ($this->pdf->h - $this->pdf->tMargin-$this->pdf->bMargin) &&
						$this->pdf->y + $this->style->value['height']>=($this->pdf->h - $this->pdf->bMargin))
			{
				$this->setNewPage();			
			}
		}
	
		function c_END_LAST_PAGE($param)
		{
			$this->style->load();
			$this->style->FontSet();
		}


<end_last_page style="height: 20mm">
...
</end_last_page>

ca devrait marcher
Ancien pseudo : lolo

10

Ca ne marche pas ...

Je peux mettre n'importe quoi comme hauteur le saut de page ne se fait jamais.

11

tu as bien mis ton bloc en toute fin de ton document ?
Ancien pseudo : lolo

12

Non !
Mais ça ne marche toujours pas ...

On est bien d'accord que si il ne reste pas la place indiquée par la balise end_last_page au bas de la dernière page, on saute une page et on place son contenu en bas de page ?

13

		function o_END_LAST_PAGE($param) 
		{
			$height =  $this->style->ConvertToMM($param['end_height'], $this->pdf->h - $this->pdf->tMargin-$this->pdf->bMargin);
			 
			if ($height < ($this->pdf->h - $this->pdf->tMargin-$this->pdf->bMargin) && $this->pdf->y + $height>=($this->pdf->h - $this->pdf->bMargin)) 
				$this->setNewPage();			 
		} 
	 
		function c_END_LAST_PAGE($param) 
		{ 

		}


à utiliser comme ceci :
	<end_last_page end_height="22mm">
		<div style="position: absolute; right: 0; bottom: 0; height: 20mm; width: 40mm; border: solid 2px #AA0000; background: #FFFAFA; ">Div de test</div>
	</end_last_page>

Ancien pseudo : lolo

14

Ok, très bien.

Seulement si on ajoute dans la div :

<table style="width:100%;border:solid;">
<tr>
<td style="width:50%">
</td>
<td style="width:50%">
<span style="text-align:right">contenu qui ne doit pas dépasser</span>
</td>
</tr>
</table>


On peut voir que ça dépasse.

15

rien n'est automatique, il faut adapter la taille de la div et la hauteur du end_last_page manuellement
Ancien pseudo : lolo

16

Mais la div est à 100% et la hauteur n'a rien à voir là dedans.

Si je reprends ton code précédent :

<end_last_page end_height="22mm">
<div style="position: absolute; right: 0; bottom: 0; height: 20mm; width: 40mm; border: solid 2px #AA0000; background: #FFFAFA; ">


<table style="width:100%;border:solid;">
<tr>
<td style="width:50%">
</td>
<td style="width:50%">
<span style="text-align:right">contenu qui ne doit pas dépasser</span>
</td>
</tr>
</table>

</div>
</end_last_page>


Que faut - il faire pour que ça ne dépasse pas?

17

ah ok, ca dépasse à droite, j'avais mal compris
Ancien pseudo : lolo

18

je viens de faire le test, chez moi ca ne dépasse pas, en utilisant exactement le même code.
les mots
tu n'utiliserais pas par hasard un font-size spécifique sur ta page ? car du coup les mots "contenu" et "dépasser" en rentreraient plus dans le TD => dépassement.

tromb Fichier joint : _test.pdf
Ancien pseudo : lolo

19

Autant pour moi ça n'a rien à voir.

C'est juste des cellules d'un tableau (en dessous) dont je n'avais pas spécifier la largeur.

En parlant de ça. Ce serait pas mal de n'avoir à spécifier les largeurs de cellule que sur la première ligne du tableau (mais il faudrait alors gérer les colspan ... et je pense que c'est compliqué)

20

wep, c'est pas trop envisageable point de vue ressource... déjà qu'il en prend un peu trop à mon gout actuellement
Ancien pseudo : lolo

21

J'ai repris le travail de piotrr et j'ai un petit soucis. En gros, je crée des PDF pour des devis et ce que je voudrai c'est pouvoir mettre des traits en bas du tableau, comme c'est le cas sur la deuxième image (faite sous Gimp). Le problème, c'est que je ne connais pas la hauteur entre la fin du tableau et le début du <end_last_page>. Y 'aurait-il une solution simple qui m'ait échappé ou faut-il que je rajoute une fonction (genre end_table_devis) ? Dans ce cas, j'aurai besoin d'un peu d'aide.

Merci d'avance

tromb Fichiers joints :
7EPU (devis.png)
OVJa (new_devis.png)

22

je n'ai pas compris ton pb...

tu veux mettre une zone commentaire juste en bas de ton tableau listant l'ensemble de tes pieces, c'est ca ?
Ancien pseudo : lolo

23

Vu que je n'ai pas été clair (désolé), je recommence.

Actuellement, on construit le devis en mettant des en-têtes, puis on crée le tableau avec tous les articles (une benne et un chariot). A la fin du tableau, on a un trait vertical. Ensuite, en base de page, on retrouve le <end_last_page> qui Piotrr a fait dans lequel on trouve les commentaires.

Ce que je voudrai, c'est faire quelque chose comme la seconde copie d'écran où la tableau des articles va jusqu'au champ de commentaires. Comme ça, on a des bordures sur la droite et la gauche du devis, jusqu'en bas. Du coup, c'est comme si les articles et les commentaires étaient dans le même tableau (ça en donne l'impression du moins).

Le problème est qu'on ne connait pas a priori la hauteur qu'occupera le tableau des articles. Pour le tableau des commentaires, il faut qu'il soit collé au footer, et c'est ce qui est fait avec l'astuce décrite au début du sujet. J'espère avoir été plus clair (sinon, je réexpliquerai grin )

24

Ah ok, je n'avais pas compris ainsi...

ben en solution simple, je ne vois pas...

si ton tableau d'articles a des lignes qui sont toujours de la même hauteur, tu peux touours compter ces lignes et voir combien il t'en manque pour finir la dernière page.
Ancien pseudo : lolo

25

J'y ai bien pensé mais justement, c'est pas si simple étant donné que dans l'ordre d'affichage dans la page j'ai :
- L'en-tête (hauteur connue)
- Du texte en haut de première page (hauteur inconnue)
- L'en-tête de mon tableau (hauteur a priori pas connue mais je dois pouvoir faire en sorte qu'on la connaisse)
- Mes lignes articles (hauteur pas forcément connue)
- Le fameux espace vide à combler
- Le pied de page de la dernière page (<end_last_page>) (hauteur non connue a priori)
- Le pied de page (hauteur connue)

Un autre problème que je n'ai pas abordé. Etant donné qu'on a le <end_last_page>, il se peut qu'on se retrouve avec la dernière page sans aucune ligne article. Dans ce cas, il faut qu'on remplisse le tableau des lignes article sur l'avant dernière page jusqu'au footer et en début de dernière page, jusqu'au <end_last_page>.

Je n'ai peut-être pas été clair encore une fois mais en gros, ce qu'il faudrait faire, c'est créer un espace qui prenne toute la place entre le dernier bloc affiché dans la page (la dernière ligne article) et le premier bloc du footer (<end_last_page> en l'occurrence).

26

aouche ca va être chiant ca sad

autre possibilité : une image de fond qui a déjà les traits des différentes colonnes, si tes colonnes sont de largeur fixe
Ancien pseudo : lolo

27

Non, les colonnes ne sont pas de largeur fixe.

Etant donné que je connais la hauteur du <end_last_page>, est-ce que c'est envisageable de dire (en rajoutant une balise peut-être) de tracer les traits verticaux à la fin de la génération du tableau en disant qu'on trace les traits depuis la position actuelle dans la page (la fin du tableau), jusqu'au haut du <end_last_page> (position dans la page = bas de la page - hauteur du footer - hauteur du <end_last_page>).

Le truc auquel il faut faire attention est également le fait que ces traits verticaux peuvent se retrouver sur deux pages si le <end_last_page> est affiché dans une nouvelle page, faute de place sur la page en cours.

28

à mon avis tu va devoir modifier la balise end_last_page pour faire ceci...

afin de connaitre la fin de position du tableau et la largeur de chacune des colonnes, tu peut utiliser la variable $HTML2PDF_TABLEAU. Elle contient les tailles et propriétés de tous les tableaux déjà tracés. Fait un vardump pour plus de détails
Ancien pseudo : lolo

29

Donc dans ma balise end_last_page, je dis de tracer un trait depuis l'ordonnée (Y) du haut du end_last_page jusqu'à la dernière ordonnée de la page où on a écrit (le Y de la fin du tableau). Pour les abscisses, je prends les largeur du tableau dans la variable $HTML2PDF_TABLEAU.

Super !

Et si maintenant mon end_last_page est sur une autre page que mon end_last_page, ça marche aussi ?

30

ben il te faudra tracer les lignes du bas du tableau jusqu'au bas de la page, puis du haut de la nouvelle page jusqu'au début de ton end_last_page
Ancien pseudo : lolo