FPDF - новая страница

363
17 мая 2017, 09:30

Есть календарь, который нужно вывести в pdf. Делаю я это так:

 define('WIDTH', 7);
    define('HEIGHT', 7);
    define('WIDTH_MONTH', 50);
    define('X_POSITION', 10);
    $pdf= new FPDF('L', 'mm', 'A4');
    $pdf->SetTitle($showgroup['name']);
    $pdf->SetFont('Helvetica');
    $pdf->AddPage('L');
    $pdf->SetXY(100, 15);
//    $pdf->SetDrawColor(50,60,100);
    $pdf->Cell(100, 10, $showgroup['name'], 0, 0, 'C', 0);
    $y = 30;
    foreach ($showgroup_types as $type) {
        $pdf->SetXY(10, $y);
        list($r, $g, $b) = sscanf($type['color'], "#%02x%02x%02x");
        $pdf->Cell(40, 7, $type['name'], 1, 0, 'C', 0);
        $pdf->SetFillColor($r, $g, $b);
        $pdf->Cell(10, 7, '', 1, 0, 'C', 1);
        $y += HEIGHT;
    }
    $y += HEIGHT;
    for ($month = 1; $month <= 12; $month++) {
//дни недели
        $pdf->SetXY(10, $y);
        $i = 1;
        $x = X_POSITION + WIDTH_MONTH;
        foreach ($day_of_week[$month] as $day) {
            $pdf->SetFontSize(8);
            $pdf->SetXY($x, $y);
            $pdf->Cell(WIDTH, HEIGHT, $day, 1, 0, 'C', 0);
            $x += WIDTH;
            $i++;
        }
        $y += HEIGHT;
        $pdf->SetFontSize(12);
        $pdf->SetXY(10, $y);
        $pdf->Cell(WIDTH_MONTH, HEIGHT, $month_names[$month], 1, 0, 'C', 0);
        $i = 1;
        $x = X_POSITION + WIDTH_MONTH;
        for ($day = 1; $day <= $days_in_month[$month]; $day++) {
            $pdf->SetFontSize(12);
            $pdf->SetXY($x, $y);
            $pdf->Cell(WIDTH, HEIGHT, $day, 1, 0, 'C', 0);
            $x += WIDTH;
            $i++;
        }
        $y += HEIGHT;
        foreach ($showgroup_users as $user) {
            $x = X_POSITION;
            $pdf->SetFontSize(12);
            $pdf->SetXY($x, $y);
            $pdf->Cell(WIDTH_MONTH, HEIGHT, $user['name'], 1, 0, 'C', 0);
            $x = X_POSITION + WIDTH_MONTH;
            for ($day = 1; $day <= $days_in_month[$month]; $day++) {
                if ($calendar_schedules[$month][$day][(int)$user['id']]['type_id']) {
                    $pdf->SetXY($x, $y);
                    list($r, $g, $b) = sscanf($types[$calendar_schedules[$month][$day][(int)$user['id']]['type_id']], "%02x%02x%02x");
                    $pdf->SetFillColor($r, $g, $b);
                    $pdf->Cell(WIDTH, HEIGHT, "", 1, 0, 'C', 1);
                } else {
                    $pdf->Cell(WIDTH, HEIGHT, '', 1, 0, 'C', 0);
                }
                $x += WIDTH;
            }
            $y += HEIGHT;
        }
        $y += HEIGHT;
    }

    $pdf->Output($showgroup['name'] . '.pdf', 'I');

но есть небольшая проблема - когда доходит до следующей страницы то у меня каждая строка начинается сверху новой страницы, то есть со второй страницы на каждой странице выводится только одна строка из таблицы. Как можно это исправить. Можно конечно задать позицию по высоте и на каждой итерации проверять не достигнута ли она, но может есть способ проще?

И ещё одна проблема - единицы измерения миллиметры, формат А4, но когда я вывожу переменную $y то оказывается что его значение на новой странице меньше 210

READ ALSO
Как удалить вредоносный код из сайта

Как удалить вредоносный код из сайта

ЗдравствуйтеНедавно начал замечать, что при открытии моего сайта идет редирект на какой то рекламный сайт

493
PHP to Python помощь [требует правки]

PHP to Python помощь [требует правки]

Доброго времени суток всем Есть такой вот небольшой код на php Нужно переписать на питоне

325