Jump to content
#StayAtHome ×

Archived

This topic is now archived and is closed to further replies.

lilywong

FPDF output - alignment

Recommended Posts

i need to output mysql query to PDF. i am using the below writehtml() function. however, i cannot have align & rowspan. pls advise where can i add so i can adjust my td align= "right", or rowpsan="2". ths.

 

<?php
//Based on HTML2PDF by Clément Lavoillotte

require('fpdf.php');

//function hex2dec
//returns an associative array (keys: R,G,B) from
//a hex html code (e.g. #3FE5AA)
function hex2dec($couleur = "#000000"){
$R = substr($couleur, 1, 2);
$rouge = hexdec($R);
$V = substr($couleur, 3, 2);
$vert = hexdec($V);
$B = substr($couleur, 5, 2);
$bleu = hexdec($B);
$tbl_couleur = array();
$tbl_couleur['R']=$rouge;
$tbl_couleur['G']=$vert;
$tbl_couleur['B']=$bleu;
return $tbl_couleur;
}

//conversion pixel -> millimeter in 72 dpi
function px2mm($px){
return $px*25.4/72;
}

function txtentities($html){
$trans = get_html_translation_table(HTML_ENTITIES);
$trans = array_flip($trans);
return strtr($html, $trans);
}
////////////////////////////////////

class PDF extends FPDF
{
//variables of html parser
var $B;
var $I;
var $U;
var $HREF;
var $fontList;
var $issetfont;
var $issetcolor;

function PDF($orientation='P', $unit='mm', $format='A4')
{
//Call parent constructor
$this->FPDF($orientation,$unit,$format);
//Initialization
$this->B=0;
$this->I=0;
$this->U=0;
$this->HREF='';

$this->tableborder=0;
$this->tdbegin=false;
$this->tdwidth=0;
$this->tdheight=0;
$this->tdalign="L";
$this->tdbgcolor=false;

$this->oldx=0;
$this->oldy=0;

$this->fontlist=array("arial","times","courier","helvetica","symbol");
$this->issetfont=false;
$this->issetcolor=false;
}

//////////////////////////////////////
//this function is to add the PDF header
function Header()
{
    //Logo
    //$this->Image('../../image/SIF_Logo3.jpg',10,8,33);
    //Arial bold 15
    $this->SetFont('Arial','B',15);
    //Move to the right
    //$this->Cell(80);
    //$this->Cell(30,10,'Title',1,0,'L');
    //Line break
    //$this->Ln(15);
}

//this function is to add the PDF footer
function Footer()
{
    //Position at 1.5 cm from bottom
    $this->SetY(-15);
    //Arial italic 8
    $this->SetFont('Arial','I',;
    //Page number
    $this->Cell(0,10,'                                                         Page '.$this->PageNo().'/{nb}',0,0,'C');
}
//html parser

function WriteHTML($html)
{
$html=strip_tags($html,"<b><u><i><a><img><p><br><strong><em><font><tr><blockquote><hr><td><tr><table><sup>"); //remove all unsupported tags
$html=str_replace("\n",'',$html); //replace carriage returns by spaces
$html=str_replace("\t",'',$html); //replace carriage returns by spaces
$a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); //explodes the string
foreach($a as $i=>$e)
{
	if($i%2==0)
	{
		//Text
		if($this->HREF)
			$this->PutLink($this->HREF,$e);
		elseif($this->tdbegin) {
			if(trim($e)!='' && $e!=" ") {
				$this->Cell($this->tdwidth,$this->tdheight,$e,$this->tableborder,'',$this->tdalign,$this->tdbgcolor);
			}
			elseif($e==" ") {
				$this->Cell($this->tdwidth,$this->tdheight,'',$this->tableborder,'',$this->tdalign,$this->tdbgcolor);
			}
		}
		else
			$this->Write(5,stripslashes(txtentities($e)));
	}
	else
	{
		//Tag
		if($e[0]=='/')
			$this->CloseTag(strtoupper(substr($e,1)));
		else
		{
			//Extract attributes
			$a2=explode(' ',$e);
			$tag=strtoupper(array_shift($a2));
			$attr=array();
			foreach($a2 as $v)
			{
				if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
					$attr[strtoupper($a3[1])]=$a3[2];
			}
			$this->OpenTag($tag,$attr);
		}
	}
}
}

function OpenTag($tag, $attr)
{
//Opening tag
switch($tag){

	case 'SUP':
		if( !empty($attr['SUP']) ) {
			//Set current font to 6pt
			$this->SetFont('','',6);
			//Start 125cm plus width of cell to the right of left margin
			//Superscript "1"
			$this->Cell(2,2,$attr['SUP'],0,0,'L');
		}
		break;

	case 'TABLE': // TABLE-BEGIN
		if( !empty($attr['BORDER']) ) $this->tableborder=$attr['BORDER'];
		else $this->tableborder=0;
		break;
	case 'TR': //TR-BEGIN
		break;
	case 'TD': // TD-BEGIN
		if( !empty($attr['WIDTH']) ) $this->tdwidth=($attr['WIDTH']/4);
		else $this->tdwidth=40; // Set to your own width if you need bigger fixed cells
		if( !empty($attr['HEIGHT']) ) $this->tdheight=($attr['HEIGHT']/6);
		//the below here is the set line spacing
		else $this->tdheight=4.5; // Set to your own height if you need bigger fixed cells
		if( !empty($attr['ALIGN']) ) {
			$align=$attr['ALIGN'];
			if($align=='LEFT') $this->tdalign='L';
			if($align=='CENTER') $this->tdalign='C';
			if($align=='RIGHT') $this->tdalign='R';
		}
		else $this->tdalign='L'; // Set to your own
		if( !empty($attr['BGCOLOR']) ) {
			$coul=hex2dec($attr['BGCOLOR']);
				$this->SetFillColor($coul['R'],$coul['G'],$coul['B']);
				$this->tdbgcolor=true;
			}
		$this->tdbegin=true;
		break;

	case 'HR':
		if( !empty($attr['WIDTH']) )
			$Width = $attr['WIDTH'];
		else
			$Width = $this->w - $this->lMargin-$this->rMargin;
		$x = $this->GetX();
		$y = $this->GetY();
		$this->SetLineWidth(0.2);
		$this->Line($x,$y,$x+$Width,$y);
		$this->SetLineWidth(0.2);
		$this->Ln(1);
		break;
	case 'STRONG':
		$this->SetStyle('B',true);
		break;
	case 'EM':
		$this->SetStyle('I',true);
		break;
	case 'B':
	case 'I':
	case 'U':
		$this->SetStyle($tag,true);
		break;
	case 'A':
		$this->HREF=$attr['HREF'];
		break;
	case 'IMG':
		if(isset($attr['SRC']) && (isset($attr['WIDTH']) || isset($attr['HEIGHT']))) {
			if(!isset($attr['WIDTH']))
				$attr['WIDTH'] = 0;
			if(!isset($attr['HEIGHT']))
				$attr['HEIGHT'] = 0;
			$this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT']));
		}
		break;
	case 'BLOCKQUOTE':
	case 'BR':
		$this->Ln(5);
		break;
	case 'P':
		$this->Ln(10);
		break;
	case 'FONT':
		if (isset($attr['COLOR']) && $attr['COLOR']!='') {
			$coul=hex2dec($attr['COLOR']);
			$this->SetTextColor($coul['R'],$coul['G'],$coul['B']);
			$this->issetcolor=true;
		}
		if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist)) {
			$this->SetFont(strtolower($attr['FACE']));
			$this->issetfont=true;
		}
		if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist) && isset($attr['SIZE']) && $attr['SIZE']!='') {
			$this->SetFont(strtolower($attr['FACE']),'',$attr['SIZE']);
			$this->issetfont=true;
		}
		break;
}
}

function CloseTag($tag)
{
//Closing tag
if($tag=='SUP') {
}

if($tag=='TD') { // TD-END
	$this->tdbegin=false;
	$this->tdwidth=0;
	$this->tdheight=0;
	$this->tdalign="L";
	$this->tdbgcolor=false;
}
if($tag=='TR') { // TR-END
	$this->Ln();
}
if($tag=='TABLE') { // TABLE-END
	//$this->Ln();
	$this->tableborder=0;
}

if($tag=='STRONG')
	$tag='B';
if($tag=='EM')
	$tag='I';
if($tag=='B' || $tag=='I' || $tag=='U')
	$this->SetStyle($tag,false);
if($tag=='A')
	$this->HREF='';
if($tag=='FONT'){
	if ($this->issetcolor==true) {
		$this->SetTextColor(0);
	}
	if ($this->issetfont) {
		$this->SetFont('arial');
		$this->issetfont=false;
	}
}
}

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

}//end of class

?>

Share this post


Link to post
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.