我正在编辑一个代码,该代码从填充了从DB调用的数据的表中创建PDF。
代码可以完美地在列中打印第一行中指定的参数数据,如图所示。
但是当DB请求多个参数时,列超出了右边距限制。 正如你在这张图片中看到的那样。
我看过这个网站上的每个帖子都是因为桌子和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
答案 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...
}
我希望这可以帮助别人。