2017-03-03 5 views
1

FPDFを使用してPDFでレポートを作成しています。 を使用してpdfレポートにテキストを入力していますが、今はレポートでテキストを正当化したいと考えていますが、同じことはできません。fpdfでテキストを正当化する方法

解決策をご提案ください。

ありがとうございます!

答えて

0

Tag-based formattingスクリプトを使用してください。

<?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

テキストは、)(セルのために働いて、マルチセル()されて正当化する、()書きではなく、 writeHTML()のために働いています。 writeHTML()を拡張することをお勧めします。 – Harinarayan

+0

たとえば、あなたのクラスPDF_HTMLに2つの特殊htmlタグ(スタイルと正当な領域用)を追加できます。エリアタグには新しいクラス – user4762971

+0

を使用できます。正当なエリアのコードを送ってください。 – Harinarayan

1

このチュートリアルでは、WriteHTMLを正当化する方法を示しています。私はそのようにのみ「汚い」ソリューションは、クラスPDF_HTMLを使用しないでください。

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

はすばらしいと思われます。 –

関連する問題