如何在php中使用FPDF在多列上换行?

时间:2018-09-18 06:45:22

标签: php fpdf

我在使用Php的FPDF中有一个问题。

我现在在代码中使用的是第1列,它将根据字符长度始终遵循第2列的高度。

问题是只有第2列在起作用。

当我尝试增加第1列中的字符长度时,它将看起来像这样。 enter image description here

当我尝试增加第2列中的字符长度时,它将看起来像这样。 enter image description here

当我尝试增加第3列中的字符长度时,它将看起来像这样。 enter image description here

当一列增加字符长度时,如何使/允许任何最小列高度始终遵循最大单元格高度。

我当前的代码如下。

index.php

        class myPDF extends FPDF 
        {
            function HeaderTable(){
                $this->SetFont('Arial','B',10);
                $this->Cell(275, 5, 'TABLE DATA',0,0);
                $this->Ln();

                $this->Cell(275, 1, '',0,0);
                $this->Ln();
                $this->SetFont('Arial','B',6);

                $this->Cell(35,5,'COLUMN 1',1,0);
                $this->Cell(120,5,'COLUMN 2',1,0);
                $this->Cell(120,5,'COLUMN 3',1,0);
                $this->Ln();
            }
            function ViewTable(){
                $datatable = array(
                    array(
                        "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum ",
                        "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum ",
                        "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum "
                    ),
                    array(
                        "18 Sept 2018",
                        "This is second row of data",
                        "Data here for second row",
                    ),
                    array(
                        "18 Sept 2018",
                        "This is third row of data",
                        "Data here for third row",
                    ),
                );

                foreach($datatable as $item)
                {   
                    $cellWidth=120;  
                    $cellHeight=5;  

                        if( ($this->GetStringWidth($item[1]) && $this->GetStringWidth($item[2]))  < $cellWidth)
                        {   
                            $line   = 1;
                            $line2  = 1;
                        } 
                        else
                        {
                            $textLength=strlen($item[1]);
                            $errMargin=10;
                            $startChar=0;
                            $maxChar=0;
                            $textArray=array();
                            $tmpString="";

                            $textLength2=strlen($item[2]);
                            $errMargin2=10;
                            $startChar2=0;
                            $maxChar2=0;
                            $textArray2=array();
                            $tmpString2="";

                            // 1
                                while($startChar < $textLength)
                                {   
                                    while($this->GetStringWidth($tmpString) < ($cellWidth-$errMargin) && 
                                    ($startChar+$maxChar) < $textLength)
                                    {
                                        $maxChar++;
                                        $tmpString=substr($item[1], $startChar, $maxChar);
                                    }
                                    $startChar=$startChar+$maxChar;
                                    array_push($textArray, $tmpString);
                                    $maxChar=0;
                                    $tmpString='';
                                }
                            // 1

                            // 2
                                while($startChar2 < $textLength2)
                                {   
                                    while($this->GetStringWidth($tmpString2) < ($cellWidth-$errMargin2) && 
                                    ($startChar2+$maxChar2) < $textLength2)
                                    {
                                        $maxChar2++;
                                        $tmpString2=substr($item[2], $startChar2, $maxChar2);
                                    }
                                    $startChar2=$startChar2+$maxChar2;
                                    array_push($textArray2, $tmpString2);
                                    $maxChar2=0;
                                    $tmpString2='';
                                }
                            // 2

                            $line=count($textArray);
                            $line2=count($textArray2);
                        }
                    $this->Cell(35,($line * $cellHeight),$item[0],1,0);
                    $xPos=$this->GetX();
                    $yPos=$this->GetY();
                    $this->MultiCell($cellWidth, $cellHeight, $item[1],1);
                    $this->SetXY($xPos + $cellWidth, $yPos);
                    $this->MultiCell($cellWidth, $cellHeight, $item[2],1);
                    $this->SetXY($xPos + $cellWidth, $yPos);
                }
            }
        }

        $pdf = new myPDF('L','mm','A4');
        $pdf->AddPage();

        $pdf->HeaderTable();
        $pdf->ViewTable();

        $pdf->Output();

感谢有人可以帮助我解决此问题。

谢谢。

1 个答案:

答案 0 :(得分:0)

要使用表和多单元格,应将fpdf类扩展为PDF_MC_Table类。 On this page,您会找到可以帮助您的源代码和示例。 创建该类是为了与表一起使用,希望对您有所帮助。