2017-03-03 24 views
1

我们正在使用FPDF在PDF格式的报告。 我们通过使用$pdf->WriteHTML(utf8_decode($main));来获取我们的pdf报告中的文本,现在我们想要在报告中证明文本的正确性,但我们无法做到这一点。如何证明文件在fpdf

请为此提出解决方案。

谢谢!

回答

0

使用Tag-based formatting脚本。我不使用类PDF_HTML,这样只有“脏”的解决方案:

<?php 
require('fpdf.php'); 
class PDF_HTML extends FPDF { 
... 
    elseif($this->ALIGN == 'center') 
     $this->Cell(0,5,$e,0,1,'C'); 
    elseif($this->ALIGN == 'justify') { 
     //$this->SetStyle("p","arial","N",7,"0,0,0"); //TODO 
     $this->WriteTag(180, 11, $e, 0, "J");// TODO parameters 
    } else 
... 
} 
class PDF_WriteTag extends PDF_HTML { 
... 
} 

ob_start(); // TODO delete after correcting any errors (only for demo) 
$pdf = new PDF_WriteTag(); 
$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->WriteHTML('You can<br><p align="justify">Et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque vitae erat. Vivamus porttitor cursus lacus. Pellentesque tellus. Nunc aliquam interdum felis. Nulla imperdiet leo. Mauris hendrerit, sem at mollis pharetra, leo sapien pretium elit, a faucibus sapien dolor vel pede. Vestibulum et enim ut nulla sollicitudin adipiscing. Suspendisse malesuada venenatis mauris. Curabitur ornare mollis velit. Sed vitae metus. Morbi posuere mi id odio. Donec elit sem, tempor at, pharetra eu, sodales sit amet, elitCurabitur urna tellus, aliquam vitae, ultrices eget, vehicula nec, diam. Integer elementum, felis non faucibus euismod, erat massa dictum eros, eu ornare ligula tortor et mauris. Cras molestie. 
</p>and add a horizontal rule:<br><hr>'); 
ob_clean(); //TODO delete after correcting any errors 
$pdf->Output(); 
+0

文本对齐正在为电池(),多节(),write()方法,但不为writeHTML()工作。请提出一些想法来扩展writeHTML()。 – Harinarayan

+0

例如,您可以在您的课程PDF_HTML中添加2个special-html标签(用于样式和对齐区域),并且可以为区域标签添加新课程 – user4762971

+0

您能否给我发送合理区域代码 – Harinarayan

1

本教程介绍了如何使用WriteHTML证明。

http://www.fpdf.org/en/script/script41.php

demo

代码:

<?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); 
    } 
} 
?> 

用法:

<?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(); 
?> 
+1

即使您的答案可能是但是一旦链接发生变化或网站所有者删除它,您的答案变得不那么有用,而是将链接中的重要部分复制到答案中,然后参考链接 –

+1

@MasivuyeCokile,您是对的。我已经更新了包含代码的答案。 –

+0

现在看起来不错。 –