Bonjour,
J'essaye de trouver un moyen de mettre à jour le footer à chaque fin de page. Dans le but d'obtenir un footer unique à chaque page.
Dans mon cas, j'ai une facture est je voudrais afficher le total des articles déja affichés dans les pages précèdente.
Pour ce faire je pensais pouvoir mettre une balise spécifique dans ma boucle qui genere les lignes de mon tableau qui mettrai à jour la variable qui stocke le <page_footer>.
Mais le problème c'est que j'ai du mal à trouver ou ce trouve cette variable ?
J'ai vu les méthode o_TFOOT o_TFOOT_SUB SetPageFooter()
Je pense que ces variables ont un rapport :
$param['num']]['tfoot']['code']
$this->parsing->code
mais j'ai du mal à savoir si le contenu de la balise <page_footer> est lui même découpé dans la premiere page en plusieurs varaibles ou si il est possible de le mettre à jour comme expliquer ci-dessus.
Merci pour votre aide.
Spipu Le 06/11/2009 à 09:43Edité par Spipu le 09/11/2009 à 19:23 il y a plusieurs solution à ce problèmes :
- soit tu découpe directement ton html en différentes pages avant conversion et du coup tu prépares tes différents footers directement en HTML
- soit modifier la classe html2pdf :
* entouré tous tes prix d'une balise span en y rajoutant un attribut du style price="20" pour dire que ca vaut 20€
* mettre dans le footer le code [[PRICE]]
* modifier la méthode o_SPAN afin que ca récupère l'attribut price et que ca le somme à une variable $total global
* modifier la méthode o_WRITE pour remplacer [[PRICE]] par $total
Merci pour ta précèdente réponse rapide.
Alors j'ai essayé de mettre en place le 2e procédé qui consiste à modifier la classe.
Par contre je rencontre un problème, j'obtiens en mettans mon span. Si je met un compteurs à l'endroit ou ca le somme à une variable $total global. C'est à dire dans la methode o_span, j'obtiens 138. Alors que mon tableau à parser est de 46. Mon total quand a lui est de 0 sur la premiere page qui dispose de 20 lignes et 1000 sur la deuxieme page etc..
J'avais du mal à comprendre et je me suis rendu compte que 138/3 pages = 46 lignes. Pour le total c'est similaire j'obtiens 3 fois plus que prévu.
Est tu sur que je dois incrementer la somme dans la balise o_span ?
Spipu Le 09/11/2009 à 19:24 heu, tu veux le nombre de lignes, ou le total de la somme des lignes ?
Bonjour Spipu,
Ben en fait par exemple, j'ai 17 <tr> dans mon tableau chaque ligne à une colonne prix qui dispose par exemple 60.00.
Je voudrais que sur la premiere page ou il figure 7 lignes j'obtiens un report de 7x60 et sur la 2e page ou il y a 10 lignes le total des lignes sur la page actuelle et sur les pages précèdente soit 17x60 = 1020.00.
Le problème c'est que si je met (total = total + prix de la ligne ) sur un span (o_span) dans une colonne ou sur un (o_tr) j'obtiens un total faux sur les 2 page mais surtout je n'obtiens le bon nombre de lignes tr si je met un compteur dans le o_tr.
Dans ce cas j'obtiens 34 a mon compteur soir 2x17lignes. J'imagine que c'est parce que les 17 lignes sont lu lors de la création de la première page et aussi lors de la création sur la 2e. Cependant je n'ai pas trouvé l'indicateur qui te permet d'afficher seulement les lignes qui n'ont pas été déjà affichés.
Quand je dit première ou 2e page, je précise que c'est apres génération, j'ai un seul tableau qui génère 2 pages car il est trop grand.
Merci pour ton aide et du temps que tu prends.
J'obtiens désormais un report sur chaque page avec celui-ci qui augmente au fur et à mesure des pages.
Par contre le report est décalé de une page.
La 1ere page à un report de 0 alors que j'ai 7 lignes à 60.00 et la 2e j'ai le report de la premiere page soit 7x60
Spipu Le 10/11/2009 à 16:06 ah oui, zut... il ecrit le contenu du footer avant de créer la page...du coup forcement il n'aime pas !
il faudrait déplacer le str_replace en début de setNewPage, comme suit :
$this->pdf->pages[$this->pdf->page]=str_replace('[[PRICE]]', $total, $this->pdf->pages[$this->pdf->page]);
(de mémoire)
Ca marche du tonnerre
Merci Encore
Bonjour Spipu,
Par contre sur la derniere Page de mon PDF J'obtiens toujours [[PRICE]] étant donnée qu'il faut toujours une appeler setNewPage pour mettre à jour le prix de la page précèdente.
Y-a t'il un moyen de savoir si on est sur la deniere page ?
Ou de Placer le remplacement du prix ailleurs :
$this->pdf->pages[$this->pdf->page]=str_replace('[[PRICE]]', $total, $this->pdf->pages[$this->pdf->page]);
Spipu Le 17/11/2009 à 20:29 il faut rajouter cette derniere ligne en tout début e la méthode output de html2pdf