Bonjour à tous,

j'ai lu les tutos FPDF, les post ici, dont un qui m'a permis de tester :
$pdf = new PDF();
$pdf->SetAutoPageBreak(true, 20); // Gestion automatique des sauts de page avec une marge de 20mm
$pdf->AddPage() ;
...sans que cela marche pour moi

1 - en Php, j'alimente un array avec des coordonnées de membres (nom, num. d'adhérent, adresse...)
2 - cet array est ensuite lu séquentiellement pour en composer un PDF de 10 cartes par page, sur 2 colonnes
3 - la lecture de chaque enregistrement et son emplacement sur la page 1 sont au point
4 - en revanche, dès la 2ème page, il y a un (léger) décalage que je n'arrive pas à résoudre... le saut de page ne marche donc pas
J'ai même essayé de le compenser en rajoutant des cellules vides, sans succès (et en plus c'est un peu goret )

Dans le programme d'édition du PDF, directement adapté des tutos FPDF, j'ai (extraits) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
 
<?php
require('fpdf186/fcartepdf.php');
 
[...]
 
       for($m=1; $m <= $nb_carte; $m++) {
 
                $carte_encours = $m ;         //   Ne donnera une valeur ENTIERE = PAGE_Numéro que toutes les 10 cartes
                $carte_max = $page_numero*10 ;       //   Rupteur de la Carte pour changer Page
 
            if ($colonne > 3) {          //   Limitation à 4 colonnes
                 $colonne = 0 ;           //   Réinitialisation du numéro de Colonne
                 $pilier = 1  ;             //   Deuxième colonne d'une Carte
                 $ligne += 1  ;            //   Réajustement du rang de la ligne à écrire, calé sur la première information (Prénom - Nom)
                 $ligne_reference = $ligne  ;      //  mise à jour de la référence pour le Prénom - Nom
            }
            else {
                 $pilier = $colonne+1  ;
                 $ligne = $ligne_reference ;             //  Remise à niveau par rapport à la colonne précédente
            }
[...]
            $une_carte = mysqli_fetch_row($result_y) ;
            $id_club = $une_carte[1]  ;
            if ($id_club < 10) {          $id_club = "0000"  ;          }
            elseif ($id_club < 1000) {          $id_club = "0".$id_club  ;          }
            $prenom = stripslashes($une_carte[2])  ;
            $prenom = mb_convert_encoding($prenom, 'ISO-8859-1', 'UTF-8') ;     //    Conversion des caractères stockés en Record > caractères accentués en PDF
            $nom = stripslashes($une_carte[3])  ;
            $nom = mb_convert_encoding($nom, 'ISO-8859-1', 'UTF-8') ;     //    Conversion des caractères stockés en Record > caractères accentués en PDF
            $personnage = $prenom." ".$nom ;
 
            $cellule[$ligne][$colonne] = "Année 2026" ;
            $cellule[$ligne][$pilier] = $personnage ;
            $adresse_1 = stripslashes($une_carte[12])  ;
            $adresse_1 = mb_convert_encoding($adresse_1, 'ISO-8859-1', 'UTF-8') ;     //    Conversion des caractères stockés en Record > caractères accentués en PDF
            $ligne += 1  ;
            $cellule[$ligne][$colonne] = "Adhérent" ;
            $cellule[$ligne][$pilier] = $adresse_1 ;
            $adresse_2 = stripslashes($une_carte[13])  ;
            if (strlen($adresse_2 > 2)) {
                $adresse_2 = mb_convert_encoding($adresse_2, 'ISO-8859-1', 'UTF-8') ;     //    Conversion des caractères stockés en Record > caractères accentués en PDF
                $ligne += 1  ;
                $cellule[$ligne][$colonne] = $id_club ;
                $cellule[$ligne][$pilier] = $adresse_2 ;
            }
 
[idem pour les autres champs]
 
                $colonne += 2 ;      //  En fin de Carte car on commence à la colonne ZERO
                $pilier = $colonne+1  ;
            }
        }     //   Fin LOOP sur chaque CARTE
 
   class PDF extends FPDF  {
 
   // Table
   function VoidTable($cellule)  {
       $w = array(25,70,25,70) ;          //   2 x 105 à l'origine
       // Colors, line width and font
       $this->SetFillColor(255,255,255) ;
       $this->SetTextColor(0) ;
       $this->SetDrawColor(255,255,255);
       $this->SetLineWidth(0.05);         //  0.2 à l'origine
       $this->SetFont('') ;
 
       if (count($cellule) > 0) {           //   Il y a AU MOINS 1 enregistrement trouvé ==> Ecriture d'au moins 1 LIGNE
 
          $fill = false ;
//          for($i=1; $i <= count($cellule); $i++) {
          foreach($cellule as $case) {
           //   4 colonnes par ligne (2 Cartes ayant 2 colonnes)
           //   1er Pilier de la page
           if(substr($case[0],0,3) == "Ann") {
               //   si correspond à "Année XXXX", écriture en purple mauve + Prénom-Nom en Bold taille 11
               $this->SetFont('Arial','B',12);
               $this->SetTextColor(192,0,192) ;
		           $this->Cell($w[0],5,$case[0],'LR',0,'C',$fill);
               $this->SetFont('Arial','B',11);
            }
            elseif($case[0] == "Adhérent") {
               //   si "Adhérent", écriture en rouge sang de boeuf + écriture standard
               $this->SetFont('Arial','B',10);
               $this->SetTextColor(128,0,36) ;
		           $this->Cell($w[0],5,$case[0],'LR',0,'C',$fill);
               $this->SetFont('Arial','',9);
            }
            else {
               //   sinon, écriture de l'ID-Club en bleu de France + écriture standard
               $this->SetFont('Arial','B',14);
               $this->SetTextColor(36,64,128) ;
		           $this->Cell($w[0],5,$case[0],'LR',0,'C',$fill);
               $this->SetFont('Arial','',9);
            }
            $this->SetTextColor(0,0,0) ;
            $this->Cell($w[1],5,$case[1],'LR',0,'C',$fill);
 
[...]
 
 
       }        //   Fin de IF COUNT($cellule) > 0
    }           //   Fin Function VoidTable
    }            //  Fin CLASS
 
   $pdf = new PDF();
   $pdf->SetAutoPageBreak(true, 20);   // Gestion automatique des sauts de page avec une marge de 20mm
   $pdf->SetFont('Arial','',10) ;
   $pdf->AddPage() ;
   $pdf->VoidTable($cellule) ;
   $pdf->AliasNbPages() ;
   $pdf->Output() ;
Et dans le fichier FCARTEPDF, bien appelé, j'ai (extraits) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
   // Automatic page break
  //  $this->SetAutoPageBreak(true,$margin);
  $this->SetAutoPageBreak(true,$margin*2);
 
function SetAutoPageBreak($auto, $margin)
{
 
function SetTopMargin($margin)
{
	// Set top margin
  //  Marge TOP = 3,5cm
	$this->tMargin = $margin*3.5 ;
}
 
	// Set auto page break mode and triggering margin
	$this->AutoPageBreak = $auto;
	$this->bMargin = $margin*1.5 ;
  //  Déclenchement = Hauteur de la Page-Marge Bottom (1,5cm)
	$this->PageBreakTrigger = $this->h-$margin*1.5 ;
}
$k = 72/25.4, comme il est normal en A4 Portrait, donc $margin = 1cm

J'avoue ne rien comprendre à pourquoi le saut de page ne repositionne pas correctement la suite des enregistrements...
Tout avis bienvenu.