FPDF多单元表问题?

时间:2015-01-13 18:37:40

标签: fpdf

我遇到自动进入多单元FPDF的问题

$pdf=new PDF('P','cm','A4');
$pdf->Open();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetMargins(1.5,1,1.5);
$pdf->SetFont('Times','',12);

$x=$pdf->GetY();
$pdf->SetY($x+1);
$pdf->SetFont('Times','B',12);
$pdf->Cell(1,0.5,'#',1,0,'L');
$pdf->Cell(4,0.5,'Name',1,0,'L');
$pdf->Cell(4,0.5,'Blabla',1,0,'L');
$pdf->Cell(4,0.5,'Blabla',1,0,'L');

//query dan arraying
$sql   ="SELECT * FROM `tb_unknown`";
$query = mysql_query( $sql );
$i = 1;

while( $result= mysql_fetch_array( $query )){
   $pdf->Ln();
   $name = $result['name'];
   $blabla1 = $result['blabla1'];
   $blabla2 = $result['blabla2'];
   $pdf->SetFont('Times','',12);
   $pdf->MultiCell(1, 0.5, $i, 1, 'L');
   $pdf->MultiCell(4, 0.5, $name, 1, 'L');
   $pdf->MultiCell(4, 0.5, $blabla1, 1, 'L');
   $pdf->MultiCell(4, 0.5, $blabla2, 1, 'L');
   $i++;
}
$pdf->Output("report.pdf", "I");

这是我的结果......

enter image description here

那是如此丑陋,表中的错误对齐位置。 有人可以帮我修理它吗?...

1 个答案:

答案 0 :(得分:4)

这个问题困扰了我一段时间,我找到了link的解决方案。

这背后的想法是在打印多单元之前采用X和Y坐标,并在打印后立即使用SetXY函数设置两个坐标。

您还必须确定行中最高单元格的高度,然后使用每行末尾的SetY移动到相应的Y坐标。

您的代码应如下所示:

$name = $result['name'];
$blabla1 = $result['blabla1'];
$blabla2 = $result['blabla2'];
$pdf->SetFont('Times','',12);

while( $result= mysql_fetch_array( $query )) {  
    $current_y = $pdf->GetY();
    $current_x = $pdf->GetX();
    $pdf->MultiCell(1, 0.5, $i, 1, 'L');
    $end_y = $pdf->GetY();

    $current_x = $current_x + 1;
    $pdf->SetXY($current_x, $current_y);
    $pdf->MultiCell(4, 0.5, $name, 1, 'L');
    $end_y = ($pdf->GetY() > $end_y)?$pdf->GetY() : $end_y;

    $current_x = $current_x + 4;
    $pdf->SetXY($current_x, $current_y); 
    $pdf->MultiCell(4, 0.5, $blabla1, 1, 'L');
    $end_y = ($pdf->GetY() > $end_y)?$pdf->GetY() : $end_y;

    $current_x = $current_x + 4;
    $pdf->SetXY($current_x, $current_y);
    $pdf->MultiCell(4, 0.5, $blabla2, 1, 'L');
    $end_y = ($pdf->GetY() > $end_y)?$pdf->GetY() : $end_y;
    $i++;
    $pdf->SetY($end_y);
}