PHP FPDF分页符

时间:2019-03-07 17:21:31

标签: php fpdf

我正在使用PHP和FPDF生成带有项目列表的PDF。我有一个循环,在循环中我用GetY()进行了验证,以检查何时会中断。这项工作正常,但在首页上没有。它正在创建页面,但在第一页中,不会像其他页面一样使文本中断至第二页。我该怎么办?

[...]
if ($pdf->GetY() > 230) {
     $pdf->AddPage();
} 
endwhile;

完整代码:

if($_GET['print'] == 'ok'){
$idO = $_GET['id'];
require_once "assets/fpdf/fpdf.php";

$pdf = new FPDF( 'P', 'mm', 'A4' );

$pdf->AddPage();
$pdf->SetFillColor( 255, 255, 255 );
$pdf->SetDrawColor( 255, 255, 255 );
$pdf->AliasNbPages();
$pdf->SetAutoPageBreak(true, 30);

$itens = get_field('itens', $idO);
$args = array(
    'post_type' => 'categorias',
    'posts_per_page' => -1,
    'meta_key' => 'ordem',
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_query' => array(
        'key' => 'status',
        'value' => 'ativo',
        'compare' => '='
    )
);

$query = new WP_Query($args);
$i=0;
while ($query->have_posts()):$query->the_post();
    foreach ($itens as $key => $value){
        if(get_field('categoria', $value) == get_the_ID()){
            $i++;

            $pdf->SetFont( 'Arial', 'B', 10 );

            if($i == 1){
                $pdf->MultiCell( 0, 10, utf8_decode(html_entity_decode(get_the_title($value))).':', 0, 'C', false );
                $imgWidth = 65;
                $f = get_field('principal', $value);
                $wI = get_field('_wp_attachment_metadata', get_field('foto'.$f, $value))['width'];
                $hI = get_field('_wp_attachment_metadata', get_field('foto'.$f, $value))['height'];

                $pY = ($imgWidth * $hI) / $wI;

                $pX = ($pdf->GetPageWidth() - $imgWidth) / 2;

                $img = wp_get_attachment_image_src( get_field('foto'.$f, $value), 'full' )[0];
                $pdf->Image($img,$pX,$pdf->GetY(),$imgWidth);
                $pdf->Ln( $pY );

                $pdf->MultiCell( 0, 5, "Gabinete:", 0, 'L', false );
            } else{
                $pdf->MultiCell( 0, 5, utf8_decode(html_entity_decode(get_the_title($value))).':', 0, 'L', false );
            }

            if(get_field('modelo', $value) != ''){
                $pdf->Ln(2);
                $pdf->SetX(20);
                $pdf->SetFont( 'Arial', 'B', 10 );
                $pdf->MultiCell( 0, 5, "Modelo: ", 0, 'L', false );
                $pdf->SetX(25);
                $pdf->SetFont( 'Arial', '', 10 );
                $pdf->MultiCell( 0, 5, utf8_decode(get_field('modelo', $value)), 0, 'L', false );
            }
            if(get_field('fabricante', $value) != ''){
                $pdf->Ln(2);
                $pdf->SetFont( 'Arial', 'B', 10 );
                $pdf->SetX(20);
                $pdf->MultiCell( 0, 5, "Fabricante: ", 0, 'L', false );
                $pdf->SetX(25);
                $pdf->SetFont( 'Arial', '', 10 );
                $pdf->MultiCell( 0, 5, utf8_decode(get_field('fabricante', $value)), 0, 'L', false );
            }

            $pdf->SetX(20);
            $pdf->SetFont( 'Arial', 'B', 10 );
            $pdf->MultiCell( 0, 10, utf8_decode("Especificações Técnicas:"), 0, 'L', false );
            $pdf->SetX(25);
            $pdf->SetFont( 'Arial', '', 10 );
            $pdf->MultiCell( 0, 5, utf8_decode(html_entity_decode(get_field('descricao', $value))), 0, 'L', false );

            if($i > 1){
                if(get_field('exibir', $value) != ''){
                    $pdf->Ln( 2 );
                    $x=0;
                    foreach (get_field('exibir', $value) as $key2 => $value2){
                        $x++;
                        $imgWidth2 = 20;
                        $wtP = ($imgWidth2 * $x);
                        $pX2 = ($x == 1)?($pdf->GetX() + $wtP):($pdf->GetX() + $wtP + 5);
                        $img2 = wp_get_attachment_image_src( get_field('foto'.$value2, $value), 'full' )[0];
                        $pdf->Image($img2,$pX2,$pdf->GetY(),$imgWidth2);
                    }
                    $pdf->Ln( 25 );
                }
            }

            if ($pdf->GetY() > 265) {
                $pdf->AddPage();
            }
        }
        $pdf->Ln( 2 );
    }
endwhile;
wp_reset_query();

$pdf->Output('', 'relatorio.pdf');
die();

}

2 个答案:

答案 0 :(得分:1)

Rob Tudo bem吗?

代替使用 SETY(),而是使用 IF()并使用 GETY()?  创建页脚。

代替:

if ($pdf->GetY() > 265) {
     $pdf->AddPage();
}

这样做:

// set your value
$this->SetY(-15);
$pdf->AddPage();

看看这位官方example

Muito法律声明是PHP还是Fpdf!

答案 1 :(得分:0)

似乎“ SetAutoPageBreak”在第一页上不起作用,仅在其他页面上起作用。代码正在创建页面,但不要在第一个页面上中断