J'ai rencontré ce problème en ayant une disposition à deux colonnes, où une colonne pouvait être si grande qu'elle s'étendrait à la page suivante. Je voulais remettre la position Y à la même position Y que la première colonne, afin qu'elles soient alignées les unes sur les autres, mais aussi continuer le document sous la plus grande des deux colonnes.
Ma solution était d'enregistrer la "position verticale" du document, qui comprend le numéro de page ($pdf->PageNo()
) et la position Y ($pdf->GetY()
).
Vous devez stocker deux positions verticales différentes. Tout d'abord, stockez le "point de départ" qui est l'endroit où vous allez commencer votre deuxième colonne. Ensuite, stockez le «plus gros point» qui est le plus bas dans le document. Le plus gros point était délicat parce que vous ne pouvez pas regarder le numéro de page ou la valeur Y seul, vous devez regarder les deux.
J'ai créé ces trois méthodes pour m'aider.
Cette solution n'inclut pas la position X dans l'exemple.
public function GetVerticalPosition() {
// Include page and Y position of the document
return array(
'page' => $this->PageNo(),
'y' => $this->GetY(),
);
}
public function SetVerticalPosition($pos) {
// Set the page and Y position of the document
$this->page = $pos['page'];
$this->SetY($pos['y']);
}
public function FurthestVerticalPosition($aPos, $bPos = null) {
if ($bPos === null) $bPos = $this->GetVerticalPosition();
// Returns the "furthest" vertical position between two points, based on page and Y position
if (
($aPos['page'] > $bPos['page']) // Furthest position is located on another page
||
($aPos['page'] == $bPos['page'] && $aPos['y'] > $bPos['y']) // Furthest position is within the same page, but further down
) {
return $aPos;
}else{
return $bPos;
}
}
L'utilisation est assez simple. Avant de dessiner vos colonnes à hauteur variable, vous devez saisir la position de départ et commencer à collecter la position maximale.
$startPos = $this->GetVerticalPosition();
$furthestPos = $this->GetVerticalPosition();
Après avoir rendu chaque cellule, avant de rendre une autre cellule au même niveau, vous voulez mettre à jour la position la plus (si nécessaire), puis réglez à la position de départ. Lorsque vous avez terminé le rendu de vos colonnes, définissez le document sur la distance maximale que vous avez enregistrée jusqu'à présent. Maintenant, vos colonnes sont correctement alignées et le pointeur de document est situé immédiatement après la colonne la plus éloignée.
belle fonctionne bien! – dano