2016-10-05 62 views
1

通過使用FPDF(multiCell),我無法爲簡單的單詞應用不同的標籤。FPDF - 組合字體樣式

舉個例子:

<em><strong><u>Sample</u></strong></em> 

在結束它顯示在PDF僅與下劃線風格(最近的一次)。有沒有可能將它們結合起來?

回答

0

不知道如果你使用FPDF或因爲FPDF」 Multicell功能似乎並沒有接受HTML TCPDF,但TCPDF的HTML字符串的倍數標記的工作原理:

$ishtml = true; 
$test = '<em><strong><u>Sample</u></strong></em>'; 
$pdf->MultiCell($width, $height, $test, $border, '$align, $fill, $ln, $x, $y, $reseth, $stretch, $ishtml); 
+0

感謝。看起來我們必須使用TCPDF。 – FieryCat

1

如果你仍然想使用FPDF,您可以通過以下

<?php 
require('fpdf.php'); 

class PDF_HTML extends FPDF 
{ 
    var $B=0; 
    var $I=0; 
    var $U=0; 
    var $HREF=''; 
    var $ALIGN=''; 

    function WriteHTML($html) 
    { 
     //HTML parser 
     $html=str_replace("\n",' ',$html); 
     $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); 
     foreach($a as $i=>$e) 
     { 
      if($i%2==0) 
      { 
       //Text 
       if($this->HREF) 
        $this->PutLink($this->HREF,$e); 
       elseif($this->ALIGN=='center') 
        $this->Cell(0,5,$e,0,1,'C'); 
       else 
        $this->Write(5,$e); 
      } 
      else 
      { 
       //Tag 
       if($e[0]=='/') 
        $this->CloseTag(strtoupper(substr($e,1))); 
       else 
       { 
        //Extract properties 
        $a2=explode(' ',$e); 
        $tag=strtoupper(array_shift($a2)); 
        $prop=array(); 
        foreach($a2 as $v) 
        { 
         if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3)) 
          $prop[strtoupper($a3[1])]=$a3[2]; 
        } 
        $this->OpenTag($tag,$prop); 
       } 
      } 
     } 
    } 

    function OpenTag($tag,$prop) 
    { 
     //Opening tag 
     if($tag=='B' || $tag=='I' || $tag=='U') 
      $this->SetStyle($tag,true); 
     if($tag=='A') 
      $this->HREF=$prop['HREF']; 
     if($tag=='BR') 
      $this->Ln(5); 
     if($tag=='P') 
      $this->ALIGN=$prop['ALIGN']; 
     if($tag=='HR') 
     { 
      if(!empty($prop['WIDTH'])) 
       $Width = $prop['WIDTH']; 
      else 
       $Width = $this->w - $this->lMargin-$this->rMargin; 
      $this->Ln(2); 
      $x = $this->GetX(); 
      $y = $this->GetY(); 
      $this->SetLineWidth(0.4); 
      $this->Line($x,$y,$x+$Width,$y); 
      $this->SetLineWidth(0.2); 
      $this->Ln(2); 
     } 
    } 

    function CloseTag($tag) 
    { 
     //Closing tag 
     if($tag=='B' || $tag=='I' || $tag=='U') 
      $this->SetStyle($tag,false); 
     if($tag=='A') 
      $this->HREF=''; 
     if($tag=='P') 
      $this->ALIGN=''; 
    } 

    function SetStyle($tag,$enable) 
    { 
     //Modify style and select corresponding font 
     $this->$tag+=($enable ? 1 : -1); 
     $style=''; 
     foreach(array('B','I','U') as $s) 
      if($this->$s>0) 
       $style.=$s; 
     $this->SetFont('',$style); 
    } 

    function PutLink($URL,$txt) 
    { 
     //Put a hyperlink 
     $this->SetTextColor(0,0,255); 
     $this->SetStyle('U',true); 
     $this->Write(5,$txt,$URL); 
     $this->SetStyle('U',false); 
     $this->SetTextColor(0); 
    } 
} 
?> 

這樣一個簡單的函數寫任何HTML標記,你只要通過調用函數編寫HTML代碼,這樣

<?php 
require('WriteHTML.php'); 

$pdf=new PDF_HTML(); 
$pdf->AddPage(); 
$pdf->SetFont('Arial'); 
$pdf->WriteHTML('You can<br><p align="center">center a line</p>and add a horizontal rule:<br><hr>'); 
$pdf->Output(); 
?> 

this HTML sample by FPDFhere the result

希望它可以幫助你和其他人