【问题标题】:make multi cells be side by side fpdf使多个单元并排fpdf
【发布时间】:2019-07-01 10:48:11
【问题描述】:

所以我知道我应该使用多单元格,这样文本就不会越过单元格并自动换行。但是,我仍然感到困惑的一件事是如何真正让单元格彼此相邻,并且只有在行尾时才进入新行。

我的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');;

}

然而,这只会使它们在新行上一个接一个地显示,而不是彼此相邻。当它进入新的数据行时,它应该只进入一个新行(如果用户在表单中输入了多行)

我已附上一张图片以显示目前正在发生的事情

【问题讨论】:

    标签: php html fpdf


    【解决方案1】:

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

    按照教程,我发现我创建了一个名为 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]));
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 2014-11-21
      • 2020-05-08
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多