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