Добавление многоклеточных строк в FPDF - PullRequest
0 голосов
/ 11 марта 2020

Я пишу скрипт, который будет выводить 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();
...