【问题标题】:FPDF table exceeds right marginFPDF 表格超出右边距
【发布时间】:2014-03-18 05:45:37
【问题描述】:

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

代码完美地在列中打印第一行中命名的参数的数据,如图所示。

但是当数据库要求几个参数时,列超过了右边距限制。 正如您在这张图片中看到的那样。

我在这个网络上看到了人们对表格和 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();

但是没有用。

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

我试过了 -> How to display table header in every page using FPDF library?

还有这个 -> Add sub-headers in all pages with FPDF

【问题讨论】:

  • 使用 MultiCell 代替 Cell fpdf.org/en/doc/multicell.htm
  • 我想我已经在使用 MultiCell。因为它为每个要打印的新测试换行。行-> 测试 | Columns-> 要显示/编辑的参数
  • 在第一个图像中它接收 4 个参数,因此它正确打印 4 列。但在第二张图片中,它为每个测试接收 9 个参数。在页边距的末尾,它应该打破 5 列的页面(即使表格格式看起来很奇怪)

标签: php pdf fpdf


【解决方案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...
}

我希望这可以帮助其他人。

【讨论】:

    猜你喜欢
    • 2013-09-16
    • 2013-08-28
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2013-06-29
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多