Я пишу скрипт, который будет выводить PDF с библиотекой FPDF. У меня многое сделано, но мне нужно добавить несколько строк, которые будут содержать значения Dynami c, которые могут вызвать перенос некоторых строк.
Есть 2 столбца, и я уже знаю ширину. Поэтому я пытаюсь поместить все свои функциональные возможности в один и тот же скрипт, а не использовать другой класс для расширения FPDF.
Поскольку он не будет проливаться на другую страницу, я пропускаю pageBreak (). Этот код основан на: Таблица с несколькими ячейками .
Я чувствую, что я довольно близко, но что-то мешает моему выводу (код ниже) ... Чего мне не хватает?
/* --- there's some of my code at the top of the doc, example below --- */
$pdf->SetDrawColor(159,159,159);
$pdf->Line(10, 75, 200, 75);
$pdf->SetDrawColor(0);
Теперь мне нужно добавить многоклетку с вычисленным высота:
$widths = array(143, 45);
function SetWidths($w)
{
//Set the array of column widths
$this->widths=$w;
}
function Row($pdf, $data)
{
//Calculate the height of the row
$nb=0;
for($i=0;$i<count($data);$i++) {
$nb = max($nb, $this->NbLines($this->widths[$i], $data[$i]));
}
$h=5*$nb;
//Draw the cells of the row
for($i=0;$i<count($data);$i++)
{
$w=$this->widths[$i];
//Save the current position
$x=$this->GetX();
$y=$this->GetY();
//Draw the border
$this->Rect($x,$y,$w,$h);
//Print the text
$pdf->MultiCell($w, 5, $data[$i], 0, 'L');
//Put the position to the right of the cell
$this->SetXY($x+$w,$y);
}
//Go to the next line
$this->Ln($h);
}
function NbLines($w,$txt)
{
//Computes the number of lines a MultiCell of width w will take
$cw=&$this->CurrentFont['cw'];
if($w==0)
$w=$this->w-$this->rMargin-$this->x;
$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
$s=str_replace("\r",'',$txt);
$nb=strlen($s);
if($nb>0 and $s[$nb-1]=="\n")
$nb--;
$sep=-1;
$i=0;
$j=0;
$l=0;
$nl=1;
while($i<$nb)
{
$c=$s[$i];
if($c=="\n")
{
$i++;
$sep=-1;
$j=$i;
$l=0;
$nl++;
continue;
}
if($c==' ')
$sep=$i;
$l+=$cw[$c];
if($l>$wmax)
{
if($sep==-1)
{
if($i==$j)
$i++;
}
else
$i=$sep+1;
$sep=-1;
$j=$i;
$l=0;
$nl++;
}
else
$i++;
}
return $nl;
}
foreach ($myArray $k => $v) {
$pdf->SetFont('Arial', '', 12);
$pdf->Row($pdf, array($v, $k));
}
$pdf->Output();