代码之家  ›  专栏  ›  技术社区  ›  Rzj Hayabusa

如何在PHP中使用fpdf在多个列上包装文本?

  •  0
  • Rzj Hayabusa  · 技术社区  · 6 年前

    我在使用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 回复  |  直到 6 年前
        1
  •  0
  •   Marco Messina    6 年前

    要使用表格和多单元格,您应该使用pdf_mc_表格类扩展fpdf类。 On this page 您将找到可以帮助您的源代码和示例。 这个类是为处理表而创建的,希望这对您有所帮助。

    推荐文章