为了账号安全,请及时绑定邮箱和手机立即绑定

使多个单元格并排 fpdf

使多个单元格并排 fpdf

PHP
largeQ 2021-09-18 17:01:55
所以我知道我应该使用多单元格,这样文本就不会越过单元格并换行。但是,我仍然感到困惑的一件事是如何真正让单元格彼此并排,并且仅在行尾时才继续换行。我的html表如下:<table class="experience" id="experience" >  <tr>  <td><b>Date From/To</b></td>  <td><b>Company Name/Address</b></td>  <td><b>Job Detail and Brief Outline of Dutie</b></td>  <td><b>Reasons For Leaving</b></td>  </tr>  <tr>  <td><input type="text" name="job_dates[]" id="job_dates" /></td>  <td><input type="text" name="company_name[]" id="company_name"/></td>  <td><input type="text" name="details[]" id="details" /></td>  <td><input type="text" name="leaving[]" id="leaving"/></td>  </tr></table><a href="#" title="" class="add-row1">Add Row</a>用户可以通过单击添加行链接来添加行。这个表只是我表单的一部分,它确实进入了我的 php 文件。现在,当用户填写表单并点击提交时,我的 php 文件获取表值:$jobDates        = (isset($_POST['job_dates'])   ? $_POST['job_dates']   : array());$company          = (isset($_POST['company_name'])     ? $_POST['company_name']     : array());$jobDetails  = (isset($_POST['details']) ? $_POST['details'] : array());$reasons = (isset($_POST['leaving'])     ? $_POST['leaving']     : array());目前,我通过执行以下操作在我的 pdf 文件中显示表格:$pdf->Cell(40,10, 'Work Experience');$pdf->Ln(20);$width_cell=array(45,50,30,90);$pdf->Cell($width_cell[0],10,'Date From/To',1,0); // First header column $pdf->Cell($width_cell[1],10,'Company Name',1,0); // Second header column$pdf->Cell($width_cell[2],10,'Job Duties',1,0); // Third header column $pdf->Cell($width_cell[3],10,'Reason for leaving',1,1); // Fourth header column  $pdf->SetFont('Arial','',10); foreach ($jobDates as $point => $data) {  $pdf->MultiCell($width_cell[0],10,$data,1,'C');   $pdf->MultiCell($width_cell[1],10,$company[$point],1,'C');  $pdf->MultiCell($width_cell[2],10,$jobDetails[$point],1,'L');  $pdf->MultiCell($width_cell[3],10,$reasons[$point],1,'C');;}然而,这只会使它们一个接一个地显示在新行上,而不是并排显示。它应该只在进入新行数据时进入新行(如果用户在表单中输入了多行)我附上了一张图片来显示目前正在发生的事情
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

设法让它工作,我将分享,以防其他遇到此问题的人偶然发现此问题。


按照教程,我发现我创建了一个名为 mc_table.php 的新 php 页面


<?php

require "fpdf/fpdf.php";


class PDF_MC_Table extends FPDF

{

var $widths;

var $aligns;


function SetWidths($w)

{

    //Set the array of column widths

    $this->widths=$w;

}


function SetAligns($a)

{

    //Set the array of column alignments

    $this->aligns=$a;

}


function Row($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;

    //Issue a page break first if needed

    $this->CheckPageBreak($h);

    //Draw the cells of the row

    for($i=0;$i<count($data);$i++)

    {

        $w=$this->widths[$i];

        $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';

        //Save the current position

        $x=$this->GetX();

        $y=$this->GetY();

        //Draw the border

        $this->Rect($x,$y,$w,$h);

        //Print the text

        $this->MultiCell($w,5,$data[$i],0,$a);

        //Put the position to the right of the cell

        $this->SetXY($x+$w,$y);

    }

    //Go to the next line

    $this->Ln($h);

}


function CheckPageBreak($h)

{

    //If the height h would cause an overflow, add a new page immediately

    if($this->GetY()+$h>$this->PageBreakTrigger)

        $this->AddPage($this->CurOrientation);

}


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;

}

}

?>

然后在我的主要 php 页面的顶部,我调用脚本:


require('mc_table.php');

而不是: $pdf = new FPDF(); 现在是: $pdf=new PDF_MC_Table();


并创建我已经完成的表:


$width_cell=array(45,50,30,90);


$pdf->Cell($width_cell[0],10,'Date From/To',1,0); // First header column 

$pdf->Cell($width_cell[1],10,'Company Name',1,0); // Second header column

$pdf->Cell($width_cell[2],10,'Job Duties',1,0); // Third header column 

$pdf->Cell($width_cell[3],10,'Reason for leaving',1,1); // Fourth header column


$pdf->SetWidths(array(45,50,30,90));


foreach ($jobDates as $point => $data) {

    $pdf->Row(array($data,$company[$point],$jobDetails[$point],$reasons[$point]));


}


查看完整回答
反对 回复 2021-09-18
  • 1 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信