мы делаем отчет в PDF с помощью FPDF. мы получаем текст в нашем pdf-отчете, используя $pdf->WriteHTML(utf8_decode($main));
, теперь мы хотим оправдать текст в отчете, но мы не можем сделать то же самое.
Пожалуйста, предложите решение для этого.
Благодаря!
В этом уроке вы узнаете, как обосновать с помощью WriteHTML
.
http://www.fpdf.org/en/script/script41.php
демонстрация
Код:
<?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(); ?>
Используйте скрипт форматирования на основе тегов . Я не использую класс 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();