FPDF表超出了右边距

时间:2014-02-18 12:47:32

标签: php pdf fpdf

我正在编辑一个代码,该代码从填充了从DB调用的数据的表中创建PDF。

代码可以完美地在列中打印第一行中指定的参数数据,如图所示。

Table showed OK

但是当DB请求多个参数时,列超出了右边距限制。 正如你在这张图片中看到的那样。

Table exceeded

我看过这个网站上的每个帖子都是因为桌子和FPDF有问题,但我找不到任何出路。

这是我在PDF中打印数据的代码:

        $type = 'application/pdf';
        $pdf=new \FPDF('L');//Querformat
        $name=$arbeitsplatz->getName();
        $pdf->AliasNbPages();
        $pdf->SetFont('Arial','',10);
        $pdf->SetTitle('Arbeitsplatzliste');
        $pdf->SetAuthor($user_info->getKuerzel());
        $pdf->SetCreator('PMA Manager');
        $pdf->SetSubject("Arbeitsplatzliste drucken");
        $pdf->SetAutoPageBreak(true, 10);
        $pdf->SetMargins(10, 10, 10);
        //$pdf->SetTopMargin(20);//in mm
        $pdf->AddPage();

        $cellLength_array=array();

        //set initial Y axis position 
        $y_axis = 20;
        $pdf->SetY($y_axis);

        if ($pdf->GetY() == $y_axis)
        {
            //Kopfzeile(Tabelle header)
            $pdf->Cell(30,7,"Probe",1,0,'L');
            $pdf->Cell(20,7,"Frist",1,0,'L');

            //Start to write table
            foreach($apParamArray as $parameter)
            {
                if($bereich==='W' || $bereich==='I'){
                    $arbeit_para_name=utf8_decode($parameter->getName()).' ['.utf8_decode($parameter->getEinheit()).']';
                }
                else 
                {
                    $arbeit_para_name=utf8_decode($parameter->getNameD()).' ['.utf8_decode($parameter->getEinheit()).']';
                }
                $length=strlen($arbeit_para_name)*2;
                array_push($cellLength_array,$length);
                $pdf->Cell($length,7,$arbeit_para_name,1,0,'C');

            }   
                $pdf->Ln(7);//mm
        }

        //Start to add data
        foreach($apProbenArray as $probe)
        {
            $frist=$probe->getFrist();
            $keys=array();
            $keys=array_keys($probe->getParameterliste());

            if($bereich==='W'  || $bereich==='I'){$pma_nr=$probe->getPmaNr();} else{$pma_nr= $probe->getLaborNr();}
            $pdf->Cell(30,7,$pma_nr,'LRB',0,'L');
            $pdf->Cell(20,7,$frist,'LRB',0,'L');

            for($j=0;$j<(sizeof($arbeit_para_r_ID_array));$j++)
            {
                $breite=$cellLength_array[$j];
                $arbeit_parameterID=$arbeit_para_r_ID_array[$j];
                if(in_array($arbeit_parameterID , $keys))
                {
                    $parameterliste=$probe->getParameterliste();
                    //print_r($parameterliste);
                    $ergebnis=$parameterliste[$arbeit_parameterID]->getErgebnis();
                    if($ergebnis!==null)
                        $pdf->Cell($breite,7,utf8_decode($ergebnis),'LRB',0,'C');
                    else
                        $pdf->Cell($breite,7,'...','LRB',0,'C');
                }
                else
                    $pdf->Cell($breite,7,'','LRB',0,'C');
            }

            $pdf->Ln(7);//mm
        }   
        //end of writting data

        //Print and get file
        $pdf->Output('prints/Arbeitsplatzliste.pdf','F');
        $fichier='../web/prints/Arbeitsplatzliste.pdf';
        $response = new Response();
        $filename='Arbeitsplatzliste.pdf';
        $response->setContent(file_get_contents($fichier));
        $response->headers->set('Content-Type', $type);
        $response->headers->set('Content-disposition', 'filename='.$filename);
        return $response;

`

我尝试添加条件

if ($pdf->GetY() == $y_axis) && ($pdf->GetX() == -10)
$pdf->AddPage();

但没效果。

我的目的也是在所有页面中显示标题行,但它也不起作用。

我尝试过这个 - &gt; How to display table header in every page using FPDF library?

这个 - &gt; Add sub-headers in all pages with FPDF

1 个答案:

答案 0 :(得分:1)

我最终用这个做到了:

if($pdf->GetX() < 230)
{
$pdf->Cell($length,7,$parameter,1,0,'C',1);
}
else
$pdf->ln();

因此,当单元格数组达到X轴限制时(我选择了230mm,因为我在横向模式下配置了页面),它将会断行。

为了在每个页面中显示标题,我使用Header()函数尝试了几次但是没有工作。 所以我用GetY()函数创建了一个条件,然后当GetY()值等于新页面的上边距时,它将打印标题;如果没有,它将继续写表数据。

if($pdf->GetY() == 5)
{
$pdf->ln();
//Header...
}
else
{
//Table data...
}

我希望这可以帮助别人。

相关问题