Вставка разрыва страницы вручную в документ PDF - PHP

У меня есть 3 массива ($PSA, $NP и $OP), которые я использую для создания PDF-файла. Функция, которую я использую для создания pdf, приведена ниже. Проблема в том, что все значения в массивах не могут содержаться на одной странице, поэтому необходимо добавить разрывы страниц, но когда я пытаюсь установить для SetAutoPageBreak значение TRUE, PDF-файл не загружается. Когда для него установлено значение False (как в методе), я получаю только первую страницу значений (остальные обрезаются). Есть ли способ вручную установить разрывы страниц? Я мог бы использовать такое условие, как:
if($pdf->getPageHeight()-$GetY() < 5) add a page break;
но не знаю, куда поместить код (мне нужно будет проверять условие перед выводом каждой строки??) Спасибо!

function generate_pvr($PSA, $NP, $OP, $FROM, $TO){
        $heading = 'Test [ From: '.$FROM.' To: '.$TO.' ]';
        $border = 0;

        $pdf = new TTPDF('P','mm','A4');
        $pdf->setMargins(0,0);
        $pdf->SetAutoPageBreak(FALSE);
        $pdf->AddPage();
        $adjust_x = 0;
        $adjust_y = 0;

        //Heading
        $pdf->SetFont('','B',12);
        $pdf->setXY( Misc::AdjustXY(30, $adjust_x), Misc::AdjustXY(20, $adjust_y) );
        $pdf->Cell(30,15,$heading, $border, 0);

        $block_adjust_y = 45;
        $block_adjust_x = 40;

        //PA entries
        foreach( $PSA as $key=>$value ) {             
            $block_adjust_y = $block_adjust_y + 5;
            $pdf->setXY( Misc::AdjustXY($block_adjust_x, $adjust_x), Misc::AdjustXY($block_adjust_y, $adjust_y) );
            $pdf->SetFont('','B',12);
            $pdf->Cell(45,5, $key, $border, 0, 'L');
            $pdf->setXY( Misc::AdjustXY($block_adjust_x + 20, $adjust_x), Misc::AdjustXY($block_adjust_y + 10, $adjust_y) );
            $pdf->SetFont('','I',10);
            $pdf->Cell(45,5, 'Emp#', $border, 0, 'L');
            $pdf->Cell(45,5, 'Employee Name', $border, 0, 'L');
            $pdf->Cell(45,5, 'Amount', $border, 0, 'R');
            $block_adjust_y = $block_adjust_y + 15;

            foreach ($value as $key2=>$value2){
                        $pdf->setXY( Misc::AdjustXY($block_adjust_x+20, $adjust_x), Misc::AdjustXY($block_adjust_y + 5, $adjust_y) );
                        $pdf->SetFont('','',10);
                        $pdf->Cell(45,5, $value2['emp_num'], $border, 0, 'L');
                        $pdf->Cell(45,5, $value2['user_name'], $border, 0, 'L');
                        $pdf->Cell(45,5, TTi18n::formatNumber( $value2['amount'] ), $border, 0, 'R');
                        $sumpsa = $sumpsa + $value2['amount'];
                        $block_adjust_y = $block_adjust_y + 5;



            }
            $pdf->setXY( Misc::AdjustXY($block_adjust_x+20, $adjust_x), Misc::AdjustXY($block_adjust_y + 5, $adjust_y) );
            $pdf->SetFont('','B',10);
            $pdf->Cell(90,5, 'Total', $border, 0, 'C');
            $pdf->Cell(45,5, TTi18n::formatNumber( $sumpsa ), $border, 0, 'R');
            $sumpsa = 0;
            $block_adjust_y = $block_adjust_y + 10;


    }


        //NP entries
        $pdf->setXY( Misc::AdjustXY($block_adjust_x, $adjust_x), Misc::AdjustXY($block_adjust_y + 5, $adjust_y) );
        $pdf->SetFont('','B',12);
        $pdf->Cell(45,5, 'NP', $border, 0, 'L');
        $pdf->setXY( Misc::AdjustXY($block_adjust_x + 20, $adjust_x), Misc::AdjustXY($block_adjust_y + 15, $adjust_y) );
        $pdf->SetFont('','I',10);
        $pdf->Cell(45,5, 'Emp#', $border, 0, 'L');
        $pdf->Cell(45,5, 'Employee Name', $border, 0, 'L');
        $pdf->Cell(45,5, 'Amount', $border, 0, 'R');
        $block_adjust_y = $block_adjust_y + 15;
        foreach ($NP as $keynp => $valuenp){
            $pdf->setXY( Misc::AdjustXY($block_adjust_x+20, $adjust_x), Misc::AdjustXY($block_adjust_y + 10, $adjust_y) );
            $pdf->SetFont('','',10);
            $pdf->Cell(45,5, $valuenp['employee_number'], $border, 0, 'L');
            $pdf->Cell(45,5, $valuenp['user_name'], $border, 0, 'L');
            $pdf->Cell(45,5, TTi18n::formatNumber( $valuenp['amount'] ), $border, 0, 'R');
            $sum_nopay = $sum_nopay + $valuenp['amount'];
            $block_adjust_y = $block_adjust_y + 5;
        }
        $pdf->setXY( Misc::AdjustXY($block_adjust_x+20, $adjust_x), Misc::AdjustXY($block_adjust_y + 10, $adjust_y) );
        $pdf->SetFont('','B',10);
        $pdf->Cell(90,5, 'Variation Total', $border, 0, 'C');
        $pdf->Cell(45,5, TTi18n::formatNumber( $sum_nopay ), $border, 0, 'R');
        $sum_nopay = 0;
        $block_adjust_y = $block_adjust_y + 10;

        //OP entries
        $pdf->setXY( Misc::AdjustXY($block_adjust_x, $adjust_x), Misc::AdjustXY($block_adjust_y + 5, $adjust_y) );
        $pdf->SetFont('','B',12);
        $pdf->Cell(45,5, 'Over Pay', $border, 0, 'L');
        $pdf->setXY( Misc::AdjustXY($block_adjust_x + 20, $adjust_x), Misc::AdjustXY($block_adjust_y + 15, $adjust_y) );
        $pdf->SetFont('','I',10);
        $pdf->Cell(45,5, 'Emp#', $border, 0, 'L');
        $pdf->Cell(45,5, 'Employee Name', $border, 0, 'L');
        $pdf->Cell(45,5, 'Amount', $border, 0, 'R');
        $block_adjust_y = $block_adjust_y + 15;
        foreach ($OP as $keyop => $valueop){
            $pdf->setXY( Misc::AdjustXY($block_adjust_x+20, $adjust_x), Misc::AdjustXY($block_adjust_y + 10, $adjust_y) );
            $pdf->SetFont('','',10);
            $pdf->Cell(45,5, $valueop['employee_number'], $border, 0, 'L');
            $pdf->Cell(45,5, $valueop['user_name'], $border, 0, 'L');
            $pdf->Cell(45,5, TTi18n::formatNumber( $valueop['amount'] ), $border, 0, 'R');
            $sum_overpay = $sum_overpay + $valueop['amount'];
            $block_adjust_y = $block_adjust_y + 5;
        }
        $pdf->setXY( Misc::AdjustXY($block_adjust_x+20, $adjust_x), Misc::AdjustXY($block_adjust_y + 10, $adjust_y) );
        $pdf->SetFont('','B',10);
        $pdf->Cell(90,5, 'Variation Total', $border, 0, 'C');
        $pdf->Cell(45,5, TTi18n::formatNumber( $sum_overpay ), $border, 0, 'R');
        $sum_overpay = 0;
        $block_adjust_y = $block_adjust_y + 10;            

        return $pdf->Output('','S');
    }

person Les_Salantes    schedule 11.09.2012    source источник


Ответы (1)


Используйте следующий код, чтобы добавить страницу.

$pdf->AddPage();

После использования приведенного выше кода последующие вызовы класса FPDF будут отображаться на новой странице.

person rationalboss    schedule 11.09.2012
comment
$pdf->AddPage(); Пробовал. Он только добавляет новую страницу, но лишние строки не отображаются на новой странице. Новая страница остается пустой. - person Les_Salantes; 11.09.2012
comment
вы можете использовать addPage() для ручного разрыва страницы на первой странице (перед содержимым, которое переходит на следующую страницу), а затем использовать его снова после страницы. я видел ваш код и ручное использование getY и getPageHeight(), вы можете использовать его, чтобы определить, где вы находитесь в PDF, и соответствующим образом настроить его для перехода на следующую страницу - person rationalboss; 11.09.2012
comment
Спасибо. Это сработало. Для всех, кто заинтересован if($pdf->getPageHeight() - $pdf->GetY() < 20){ //Add footer for this page //Add new page //Add header for new page }, вам нужно будет поставить условие перед печатью новой строки - person Les_Salantes; 12.09.2012