2016-10-05 3 views
1

Используя FPDF (multiCell), я не могу применять разные теги для простого слова.FPDF - комбинированные стили шрифтов

В качестве примера:

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

В конце это показано в PDF только со стилем подчеркивания (последний один). Есть ли возможность их комбинировать?

ответ

0

Не уверен, что если вы используете FPDF или TCPDF поскольку FPDF»Multicell функция, кажется, не принимают HTML, но с 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, вы можете писать любые HTML-теги, используя простые функции, как это ниже

<?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 код при вызове функции, которые, как это

<?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 FPDF и here the result

Надеются, что это может помочь вам и другим

 Смежные вопросы

  • Нет связанных вопросов^_^