我正在使用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();
}
答案 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”在第一页上不起作用,仅在其他页面上起作用。代码正在创建页面,但不要在第一个页面上中断