Hello Buddy, In this post we’ll get the knowledge about how to convert HTML to PDF file using PHP with fpdf library.
Usually HTML to PDF conversion is a big problem for PHP Developers and every time they look for appropriate solutions, so when reviewing this post you’ll not take more than 10 minutes to convert HTML to PDF.I even have used a library fpgf open and extremely helpful library for developers, Here may be a esay tutorial on the way to convert HTML to PDF using fpdf.
First of all, you need to download fpdf library file and include it in your file, please prefer below setting and the way to show tags, font and picture in your PDF file. With fpdf library we tend to used HTMLparser library contributed by programmers and all other different libraries available here you can download and use as per your demand.
index.php
In this file , i created simple HTML Contact form when you will submit contact form it show that form data on PDF Format:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<html> <head> <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> <link href="css/bootstrap-responsive.min.css" rel="stylesheet" media="screen"> <script type="text/javascript" src="js/jquery-1.8.0.min.js"></script> <script type="text/javascript" src="js/bootstrap.min.js"></script> <title>How to convert html to pdf | tutorialswebsite.com</title> </head> <body> <div class="container"> <form class="contact-us form-horizontal" action="dopdf.php" method="post"> <legend>Fill Form and submit to generate PDF</legend> <div class="control-group"> <label class="control-label">Name</label> <div class="controls"> <div class="input-prepend"> <span class="add-on"><i class="icon-user"></i></span> <input type="text" class="input-xlarge" name="name" placeholder="Name"> </div> </div> </div> <div class="control-group"> <label class="control-label">Email</label> <div class="controls"> <div class="input-prepend"> <span class="add-on"><i class="icon-envelope"></i></span> <input type="text" class="input-xlarge" name="email" placeholder="Email"> </div> </div> </div> <div class="control-group"> <label class="control-label">Url</label> <div class="controls"> <div class="input-prepend"> <span class="add-on"><i class="icon-globe"></i></span> <input type="text" id="url" class="input-xlarge" name="url" placeholder="http://www.example.com"> </div> </div> </div> <div class="control-group"> <label class="control-label">Comment</label> <div class="controls"> <div class="input-prepend"> <span class="add-on"><i class="icon-pencil"></i></span> <textarea name="comment" class="span4" rows="4" cols="80" placeholder="Comment (Max 200 characters)"></textarea> </div> </div> </div> <div class="control-group"> <div class="controls"> <button type="submit" class="btn btn-primary">Submit</button> <button type="button" class="btn">Cancel</button> </div> </div> </form> </div> </body> </html> |
WriteHTML.php
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
<?php //HTML2PDF by Clément Lavoillotte require('fpdf17/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['V']=$vert; $tbl_couleur['B']=$bleu; return $tbl_couleur; } //conversion pixel -> millimeter at 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_HTML extends FPDF { //variables of html parser protected $B; protected $I; protected $U; protected $HREF; protected $fontList; protected $issetfont; protected $issetcolor; function __construct($orientation='P', $unit='mm', $format='A4') { //Call parent constructor parent::__construct($orientation,$unit,$format); //Initialization $this->B=0; $this->I=0; $this->U=0; $this->HREF=''; $this->fontlist=array('arial', 'times', 'courier', 'helvetica', 'symbol'); $this->issetfont=false; $this->issetcolor=false; } function WriteHTML($html) { //HTML parser $html=strip_tags($html,"<b><u><i><a><img><p><br><strong><em><font><tr><blockquote>"); //supprime tous les tags sauf ceux reconnus $html=str_replace("\n",' ',$html); //remplace retour à la ligne par un espace $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); //éclate la chaîne avec les balises foreach($a as $i=>$e) { if($i%2==0) { //Text if($this->HREF) $this->PutLink($this->HREF,$e); 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 '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 'TR': 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['V'],$coul['B']); $this->issetcolor=true; } if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist)) { $this->SetFont(strtolower($attr['FACE'])); $this->issetfont=true; } break; } } function CloseTag($tag) { //Closing tag 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 ?> |
dopdf.php
“dopdf.php” file contain PHP code which is submitted by index.php form to generate pdf file.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php require('WriteHTML.php'); $pdf=new PDF_HTML(); $pdf->AliasNbPages(); $pdf->SetAutoPageBreak(true, 15); $pdf->AddPage(); $pdf->Image('companylogo.png',18,13,33); $pdf->SetFont('Arial','B',14); $pdf->WriteHTML('<para><h1>Tutorialswebsite Blog, Tutorials, jQuery, Ajax, PHP, MySQL </h1><br> Website: <u>www.tutorialswebsite.com</u></para><br><br>How to Convert HTML to PDF with fpdf example'); $pdf->SetFont('Arial','B',7); $htmlTable='<TABLE> <TR> <TD>Name:</TD> <TD>'.$_POST['name'].'</TD> </TR> <TR> <TD>Email:</TD> <TD>'.$_POST['email'].'</TD> </TR> <TR> <TD>URl:</TD> <TD>'.$_POST['url'].'</TD> </TR> <TR> <TD>Comment:</TD> <TD>'.$_POST['comment'].'</TD> </TR> </TABLE>'; $pdf->WriteHTML("<br><br><br>$htmlTable"); $pdf->SetFont('Arial','B',6); $pdf->Output(); ?> |
In this file we set auto page break true if your content increase single page area then it will automatically add new page and process.
2 3 4 5 6 7 |
$pdf->Image('companylogo.png',18,13,33); $pdf->SetFont('Arial','B',14); //These lines used to add a logo and select font size for heading |
2 3 4 5 6 |
$pdf->SetFont('Arial','B',7); //Select small font then heading for inner content. |
2 3 4 5 6 |
$pdf->WriteHTML("<br><br><br>$htmlTable"); $pdf->Output(); //Write HTML to pdf file and output that file on the web browser. |
Support
If you need any help regarding this tutorials please feel free to comment we love to help you or you need all code file please contact us.
[sociallocker]
[/sociallocker]
Pradeep Maurya is the Professional Web Developer & Designer and the Founder of “Tutorials website”. He lives in Delhi and loves to be a self-dependent person. As an owner, he is trying his best to improve this platform day by day. His passion, dedication and quick decision making ability to stand apart from others. He’s an avid blogger and writes on the publications like Dzone, e27.co