2012-09-10 14 views
6

mam tej pętli, która drukuje 6 rzędów (wielokomórkowych) przez około 30 razy. Problem jest, że gdy osiągnie dolną stronę drukuje 2 lub 3 wiersze z Multicell i na następnej stronie drukuje pozostałe 3 wiersze. Chcę, aby wydrukował wszystkie 6 wierszy na następnej stronie, jeśli nie ma wystarczającej ilości miejsca dla wszystkich 6 wierszy na tej stronie. używam tego kodu:FPDF strona przerwa problem

$height_of_cell = 60; mm 
$page_height = 279.4; // mm (portrait letter) 
$bottom_margin = 20; // mm 
$space_left = $page_height - $p->GetY(); // space left on page 
$space_left -= $bottom_margin; // less the bottom margin 
if ($height_of_cell >= $space_left) { 
$p->Ln();       
$p->AddPage(); // page break 
$p->Cell(100,5,'','B',2); // this creates a blank row for formatting reasons 
} 

ale to nie działa. Jakieś rozwiązania? Dzięki!

Odpowiedz

19

Zastosowanie GetY uzyskać aktualną pozycję, odjąć go od wysokości dokumentu. Jeśli to jest mniej niż 6x (masz 6 wierszy) wielokomórkowej swojej wysokości, a następnie wymusić podział strony przy użyciu AddPage.

wiem, że ustalona, ​​ale na rzecz kogoś innego, to powinien dać szeroki pomysł.

<?php 
$p = new FPDF(); 
$p->AddPage(); 
$p->SetFont('Arial','B',16); 
$p->SetAutoPageBreak(false); 
$height_of_cell = 60; // mm 
$page_height = 286.93; // mm (portrait letter) 
$bottom_margin = 0; // mm 
    for($i=0;$i<=100;$i++) : 
    $block=floor($i/6); 
    $space_left=$page_height-($p->GetY()+$bottom_margin); // space left on page 
     if ($i/6==floor($i/6) && $height_of_cell > $space_left) { 
     $p->AddPage(); // page break 
     } 
    $p->Cell(100,10,'This is a text line - Group '.$block,'B',2); 
    endfor; 
$p->Output(); 
?> 
+0

Witam, zmodyfikowałem kod tak, ale nic nie robi. Czy widzisz gdzieś błąd? –

+0

Wymyśliłem to. już działa. –

+0

GReat - właśnie edytowałem swoją odpowiedź, aby pomóc dalej :) – Mark