Jump to content

FPDF output - alignment


lilywong

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

?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.